首先来说下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表中数据

boot mongodb spring 版本对应 mongodb和springboot_spring boot

 

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

boot mongodb spring 版本对应 mongodb和springboot_java_02

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 发送请求查询结果

boot mongodb spring 版本对应 mongodb和springboot_关系数据库_03

只查询 年龄大于20的用户:

boot mongodb spring 版本对应 mongodb和springboot_mongodb_04

 其他条件可以自己尝试这里就不演示啦。

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的情况下

boot mongodb spring 版本对应 mongodb和springboot_关系数据库_05

 查看MongoDB 新增成功

boot mongodb spring 版本对应 mongodb和springboot_mongodb_06

加上id 并修改数据

 

boot mongodb spring 版本对应 mongodb和springboot_java_07

 查看MongoDB 修改成功

boot mongodb spring 版本对应 mongodb和springboot_spring boot_08

 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 

boot mongodb spring 版本对应 mongodb和springboot_关系数据库_09

 

查看 MongoDB 修改成功

boot mongodb spring 版本对应 mongodb和springboot_spring boot_10

 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 删除

boot mongodb spring 版本对应 mongodb和springboot_spring_11

 查看MongoDB 删除成功

boot mongodb spring 版本对应 mongodb和springboot_spring_12

 总结

其实MongoDB在springboot中的使用不仅于此,还有更多的功能和更优雅的使用方式等待着我们去发掘。