首先来说下SpingBoot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
MongDB
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
开发环境
IDEA 、 Navicat 、PostMan、SpringBoot、Jdk1.8。
1.MongoDB表中数据
2.pom.xml中引入MongoDB依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
3.application.yml文件中加入配置
spring:
data:
mongodb:
uri: mongodb://192.168.0.107:27017/xb
4.注入MongoTemplate
5.实体类POJO
package com.tm.pojo;
import lombok.Data;
/**
* @author xiaobai
* @create 2022-11-04 18:23
*/
@Data
public class UserPojo {
private String id;
private Integer userId;
private String name;
private String sex;
private Integer age;
}
6.条件查询VO:
package com.tm.pojo.vo;
import lombok.Data;
/**
* @author xiaobai
* @create 2022-11-04 18:30
*/
@Data
public class UserVO {
private Integer userId;
private String name;
private String sex;
private Integer ageMin;
private Integer ageMax;
}
7. 增删改查方法如下
1.查询(find)
regex:正则表达式
Pattern.compile将给定的正则表达式编译并赋予给Pattern类
Pattern.CASE_INSENSITIVE忽略大小写
gte:大于等于 lte:小于等于 (数字类型 时间类型都可以)
//查询
@PostMapping ("queryUserMongoDB")
public List<UserPojo> queryUserMongoDB(@RequestBody UserVO userVO){
// 创建一个 Query 对象,用来处理查询条件
Query query = new Query();
// 判断条件是否为空 并依次拼接
if(StringUtils.isNotBlank(userVO.getName())){
//新加一个条件 Criteria 定义一个条件查询的标准
query.addCriteria(Criteria.where("name")
//regex 正则
//Pattern 规定正则格式
.regex(Pattern
//compile 编译
//Pattern.CASE_INSENSITIVE 忽略大小写
.compile("^.*"+userVO.getName()+".*$", Pattern.CASE_INSENSITIVE)));
}
//判断条件中的最小年龄
if(userVO.getAgeMin() != null && userVO.getAgeMax() == null){
//拼接条件,最小年龄
query.addCriteria(Criteria.where("age").gte(userVO.getAgeMin()));
}
//判断条件中的最大年龄
if(userVO.getAgeMax() != null && userVO.getAgeMin() == null){
//拼接条件,最大年龄
query.addCriteria(Criteria.where("age").lte(userVO.getAgeMax()));
}
//如果一个key要被多次查询,例如最大最小值,必须判断三次
//如果有最大值没有最小值,则只要最大值
//如果都有,则都要
if(userVO.getAgeMin() != null && userVO.getAgeMax() !=null){
query.addCriteria(Criteria.where("age").gte(userVO.getAgeMin()).lte(userVO.getAgeMax()));
}
// List<UserPojo> user = mongoTemplate.findAll(UserPojo.class, "user");
if(StringUtils.isNotBlank(userVO.getSex())){
query.addCriteria(Criteria.where("sex").is(userVO.getSex()));
}
List<UserPojo> list = mongoTemplate.find(query, UserPojo.class, "user");
return list;
}
使用Postman 发送请求查询结果
只查询 年龄大于20的用户:
其他条件可以自己尝试这里就不演示啦。
2.新增 or 修改
新增主要判断是否有ID 如没有ID说明要使用新增 否则 是要进行修改
/**
* 新增
*/
@PostMapping("addUserMongoDB")
public String addUserMongoDB(@RequestBody UserPojo userPojo){
// 判断如果没有 id 则进行新增
if(StringUtils.isBlank(userPojo.getId())){
mongoTemplate.insert(userPojo,"user");
return "新增成功";
}
//修改的流程,需要先通过传过来的ID,查询得到对应数据
//再将原数据在基础上进行修改,再保存
Query query = new Query();
query.addCriteria(Criteria.where("userId").is(userPojo.getUserId()));
//创建一个修改器吧所以要修改的数据放到修改器中
Update update = new Update();
update.set("name",userPojo.getName());
update.set("sex",userPojo.getSex());
update.set("age",userPojo.getAge());
UpdateResult result = mongoTemplate.updateFirst(query, update, "user");
if(result.getModifiedCount() != 1){
return "修改失败";
}else {
return "修改成功";
}
}
演示新增用户 在没有ID的情况下
查看MongoDB 新增成功
加上id 并修改数据
查看MongoDB 修改成功
3 修改(根据名称修改多条信息)
WriteResult upsert = mongoTemplate.updateMulti(query, update, "user"); //查询到的全部更新
WriteResult upsert = mongoTemplate.updateFirst(query, update, "user"); //查询更新第一条
WriteResult upsert = mongoTemplate.upsert(query, update, "user"); //有则更新,没有则新增
// 修改(根据名称修改多条信息)
@PutMapping("putUserMongoDB")
public String putUserMongoDB(@RequestBody UserPojo userPojo){
Query query = new Query();
query.addCriteria(Criteria.where("sex").is(userPojo.getSex()));
Update update = new Update();
update.set("age",userPojo.getAge());
mongoTemplate.updateMulti(query,update,"user");
return "修改成功";
}
演示 将性别为 “女“ 的用户 年龄修改成 28
查看 MongoDB 修改成功
4 删除
// 删除
@DeleteMapping("deleteUserMongoDB/{id}")
public String deleteUserMongoDB(@PathVariable String id){
Query query=new Query();
query.addCriteria(Criteria.where("id").is(id));
DeleteResult user = mongoTemplate.remove(query, UserPojo.class, "user");
return "删除成功";
}
演示 指定ID 删除
查看MongoDB 删除成功
总结
其实MongoDB在springboot中的使用不仅于此,还有更多的功能和更优雅的使用方式等待着我们去发掘。