SpringBoot之整合MongoDB实现增删改查操作

一、创建项目

选用gradle做项目自动化构建工具

gradle

添加lombok,web,mongodb的依赖
关于lombok的使用,请见本人博客:Lombok的介绍,以及在IDEA中使用Lombok来优雅的编码

添加依赖

二、application.properties 添加配置

#项目服务端口号
server.port: 8100

#mongodb配置
spring.data.mongodb.host: MongoDB连接的IP地址
spring.data.mongodb.port: 27017
spring.data.mongodb.database: testdb
#如果mongodb设置了账号密码
spring.data.mongodb.username=账号
spring.data.mongodb.password=密码

启动项目测试mongodb是否连接成功,如果启动连接未报错,则连接成功。

启动

三、实现MongoDB的增删改查

  1. Controller层
    (1)增

    @RestController
    @RequestMapping(value = "/mongodb")
    public class MongoDBTestController {
    
    	@Resource
    	private MongoDBTestService mongoDBTestService;
    	
    	//增操作
    	@PostMapping(value = "/add")
    	public String addMongoDB(@RequestBody UserDTO user) {
      		mongoDBTestService.addMongoDB(user);
      		return "SUCCESS";
    	}
    }
    

    (2)删

    @GetMapping(value = "/delete/{userName}")
    public String deleteMongoDB(@PathVariable(value = "userName") String userName) {
        mongoDBTestService.deleteMongoDB(userName);
        return "SUCCESS";
    }
    

    (3)改

    //更改一条数据的一个字段
    @PostMapping(value = "/update")
    public String updateMongoDB(@RequestBody TestUser user) {
        mongoDBTestService.updateMongoDB(user);
        return "SUCCESS";
    }
    
    //更改一条数据的多个字段
    @PostMapping(value = "/update/many")
    public String updateManyMongoDB(@RequestBody TestUser user) {
        mongoDBTestService.updateManyMongoDB(user);
        return "SUCCESS";
    }
    

    (4)查

    //查询一条数据
    @GetMapping(value = "/find/one/{userName}")
    public TestUser getOneMongoDB(@PathVariable(value = "userName") String userName) {
        return mongoDBTestService.getOneMongoDB(userName);
    }
    
    //查询所有数据
    @GetMapping(value = "/find/all")
    public List<TestUser> getAllMongoDB() {
        return mongoDBTestService.getAllMongoDB();
    }
    
    //模糊查询
    @GetMapping(value = "/find/fuzzy/{userName}")
    public List<TestUser> getFuzzyMongoDB(@PathVariable(value = "userName") String userName) {
        return mongoDBTestService.getFuzzyMongoDB(userName);
    }
    
    //分页查询
    @GetMapping(value = "/find/page")
    public List<UserDTO> getpageMongoDB() {
        return mongoDBTestService.getpageMongoDB();
    }
    
  2. Service层
    (1)增

    @Service
    public class MongoDBTestServiceImpl implements MongoDBTestService {
    
    	@Resource
    	private MongoTemplate mongoTemplate;
    
    	@Override
    	public void addMongoDB(UserDTO user) {
    		//添加到Mongo数据库时,默认以对象userDTO为集合名称添加
      		mongoTemplate.insert(user);
      		//也可以指定添加到某个集合中
      		//mongoTemplate.insert(user, "testCollection");
    	}
    }
    
    

    (2)删

    @Override
    public void deleteMongoDB(String userName) {
        //根据姓名删除
        Query query = Query.query(Criteria.where("userName").is(userName));
        mongoTemplate.remove(query, UserDTO.class);
    }
    

    Criteria类:封装所有的语句,以方法的形式进行查询。
    Query类:将语句进行封装或者添加排序之类的操作。

    (3)改

    @Override
    public void updateMongoDB(TestUser user) {
        //更改一条数据的一个字段
        Query query = Query.query(Criteria.where("userName").is(user.getUserName()));
        Update update = Update.update("age", user.getAge());
        //参数1:查询条件  参数2:修改  参数3:表名称(可以传对应集合的对象名)
        mongoTemplate.updateFirst(query, update, TestUser.class);
    }
    
    @Override
    public void updateManyMongoDB(TestUser user) {
        //更改一条数据的多个字段
        Query query = Query.query(Criteria.where("userName").is(user.getUserName()));
        Update update = new Update();
        update.set("age", user.getAge());
        update.set("userName", "test2");
        //参数1:查询条件  参数2:修改  参数3:表名称(也可以是具体集合名)
        mongoTemplate.updateFirst(query, update, "testUser");
    }
    

    (4)查

    @Override
    public TestUser getOneMongoDB(String userName) {
        Query query = Query.query(Criteria.where("userName").is(userName));
        //findOne() 返回一个文档满足指定的查询条件。如果有多个文档满足查询条件,则返回第一个文档
        TestUser user = mongoTemplate.findOne(query, TestUser.class);
        return user;
    }
    
    @Override
    public List<TestUser> getManyMongoDB(String userName) {
        Query query = Query.query(Criteria.where("userName").is(userName));
        //find() 返回所有满足条件的文档
        List<TestUser> testUserList = mongoTemplate.find(query, TestUser.class, "testUser");
        return testUserList;
    }
    
    @Override
    public List<TestUser> getAllMongoDB() {
        //findAll() 返回集合中所有的文档
        List<TestUser> testUserList = mongoTemplate.findAll(TestUser.class, "testUser");
        return testUserList;
    }
    
    @Override
    public List<TestUser> getFuzzyMongoDB(String userName) {
        //设置正则规则
        //Pattern.CASE_INSENSITIVE 启用不区分大小写的匹配
        Pattern pattern = Pattern.compile("^.*" + userName +".*$", Pattern.CASE_INSENSITIVE);
        Query query = Query.query(Criteria.where("userName").regex(pattern));
        List<TestUser> testUserList = mongoTemplate.find(query, TestUser.class);
        return testUserList;
    }
    
    @Override
    public List<UserDTO> getpageMongoDB() {
        Query query = new Query();
        //跳过10条,每页显示5条
        query.skip(10).limit(5);
        List<UserDTO> testUserList = mongoTemplate.find(query, UserDTO.class, "user");
        //总个数
        long count = mongoTemplate.count(query, "user");
        System.out.println(count);
        return testUserList;
    }
    

四、其他相关概念和方法

Criteria类:封装所有的语句,以方法的形式进行查询。
Query类:将语句进行封装或者添加排序之类的操作。

Criteria类常用的方法:

  1. andOperator
    等同$and,并且
  2. orOperator
    等同$or,或者
  3. gt
    等同$gt,大于
  4. gte
    等同$gte,大于等于
  5. in
    等同$in,包含
  6. nin
    等同$nin,不包含
  7. is
    等同$is,等于
  8. lt
    等同$lt,小于
  9. lte
    等同$lte,小于等于
  • 5
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值