SpringBoot整合MongoDB

SpringBoot整合MongoDB

Spring-data对mongodb做了支持,使用spring-data-mongodb可以简化mongodb的操作,通过内部提供的MongoTemplate对象方便的进行数据的CRUD 。

入门案例

通过SpringData-mongo完成数据CRUD 。

  1. 创建工程,导入依赖

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
    </parent>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    
  2. 添加mongodb的配置信息

    # 配置mongo的连接地址
    spring:
    data:
        mongodb:
        uri: mongodb://192.168.136.160:27017/testdb
    
  3. 编写实体类,并通过注解配置映射对应的tb_person:

    // 指定实体类和mongo集合的映射关系, tb_person是mongodb中的一个collection
    @Document("tb_person")
    public class Person {
    
        @Id
        private ObjectId id;
    
        @Field("myname")
        private String name;
    
        private Integer age;
    
        private String address;
    }
    

  4. 通过注入MongoTemplate进行数据操作

@RunWith(SpringRunner.class)
@SpringBootTest
public class MongoTest {
    /**
     * 1. 注入MongoTemplate对象
     * 2. 调用其方法完成数据的CRUD
     */
    @Autowired
    private MongoTemplate mongoTemplate;

    // 保存
    @Test
    public void testSave(){
        Person person = new Person();
        person.setName("李四");
        person.setAge(19);
        person.setAddress("北京金燕龙");
        mongoTemplate.save(person);
    }

    // 查询
    @Test
    public void testFindAll() {
        List<Person> list = mongoTemplate.findAll(Person.class);
        for (Person person : list) {
            System.out.println(person);
        }
    }

    // 条件查询
    @Test
    public void testFind(){
        // 1. 创建Criteria对象,并设置查询条件
        Criteria criteria = Criteria.where("myname").is("张三")
                .and("age").is(18); // is 相当于sql语句中的=
        // 2. 根据Criteria创建Query对象
        Query query = Query.query(criteria);
        // 3. 查询
        List<Person> list = mongoTemplate.find(query, Person.class);// Query对象,实体类对象
        for (Person person : list) {
            System.out.println(person);
        }
    }

    // 分页查询
    @Test
    public void testFindPage(){
        int page = 1;
        int size = 2;

        // 1. 创建Criteria对象,并设置查询条件
        Criteria criteria = Criteria.where("age").lt(50);
        // 2. 根据Criteria创建Query对象
        Query query = Query.query(criteria)
                .skip((page - 1) * size)    // 从第几条开始查询
                .limit(size)   // 每页查询条数
                .with(Sort.by(Sort.Order.desc("age"))); // 设置排序

        // 3. 查询
        List<Person> list = mongoTemplate.find(query, Person.class);// Query对象,实体类对象
        for (Person person : list) {
            System.out.println(person);
        }
    }

    // 更新
    @Test
    public void testUpdate() {
        // 1. 构建Query对象
        Query query = Query.query(Criteria.where("id").is("608651a9adf0f043d9a303d7"));
        // 2. 设置需要更新的数据内容
        Update up = new Update();
        up.set("age", 10);
        up.set("myname", "lisi");
        // 3. 调用方法
        mongoTemplate.updateFirst(query, up, Person.class);
    }

    // 删除
    @Test
    public void testDelete() {
        // 1. 构建Query对象
        Query query = Query.query(Criteria.where("id").is("608651a9adf0f043d9a303d7"));
        // 2. 调用方法
        mongoTemplate.remove(query, Person.class);
    }
}