1.创建springboot项目引入依赖

  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

  <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>

上面除了MongoDB还有lombok的依赖

配置文件路径

 虚拟机地址;端口号/数据库名称

2.创建对应的实体类

package com.example.mongodb.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Data
@Document("User")//指定数据库中的集合(相当于mysql中的表)
public class User {

    @Id
    private String id;
    private String name;
    private String email;
    private String createDate;
    private Integer age;

}

我们应用lombok简化开发@Data帮我们生成get和set方法

@Document("User")//指定数据库中的集合(相当于mysql中的表)

@Id 就是指定这个属性对应MongoDB数据库集合中_id的属性

3.引用MongoTemplate

spring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活适用这两种方式操作mongodb,MongoRepository的缺点是不够灵活,MongoTemplate正好可以弥补不足。

我们在测试类中进行测试

3.1添加记录方法

    @Test
    public void createMg(){
        Student student=new Student();
        student.setAge(33);
        student.setName("DFP_test");
        student.setEmail("963369@cc.com");
        Student student1 = mongoTemplate.insert(student);
        System.out.println("查询MG的数据:"+student);
    }

用MongoTemplate给我们封装好的insert方法我们吧 设置好的数据传入即可

执行程序查看结果控制台输出了我们传入的数据

 到linux下的MongoDB查看

输入命令发现成功写入数据 

我们插入多几个数据方便做测试结果如下

3.2查询数据库数据

    @Test
    public void findMg(){
        List<Student> studentList = mongoTemplate.findAll(Student.class);
        for (Student s:studentList) {
            System.out.println("查询的数据:"+s);
        }
    }

结果

和linux数据库查询到的数据一致 

3.3根据Id查询数据

除了要传入id的值也要传入对应实体类的class

    @Test
    public void findByID(){
        Student student = mongoTemplate.findById("620496a5949a122fa0cc3f1f", Student.class);
        System.out.println("根据ID查询:"+student);

    }

参考上面的图和linux下的数据一致 

3.4条件查询方法

查询名字为张三并且年龄也是91的数据

    @Test
    public void findList(){
        Query query=new Query(Criteria.where("name").is("张三").and("age").is(91));
        List<Student> tList = mongoTemplate.find(query, Student.class);
        System.out.println("条件查询:"+tList);
    }
mongoTemplate.find(query, Student.class)

需要传入2个参数一个是条件构造的对象,另一个就是对于实体类的class

条件构造的对象我们用Query来构建

 3.5模糊查询

查询名字包含o的

@Test
    public void findLikeList(){
        String likeName="o";//自定义的常量
        String reges=String.format("%s%s%s", "^.*", likeName, ".*$");//匹配规则

        Pattern pattern=Pattern.compile(reges,Pattern.CASE_INSENSITIVE);//正则匹配规则--pattern的常量
        Query query =new Query(Criteria.where("name").regex(pattern));

        List<Student> studentList=mongoTemplate.find(query,Student.class);
    for (Student s:studentList) {
        System.out.println("模糊查询:"+s);
    }
}

还是调用mongoTemplate.find(query,Student.class);方法,传入条件构造的对象

因为我们是要模糊查询,不同于mysql的like方法我们在这要用到正则匹配规则,需要要用到Pattern 来构造模糊条件。

通过String.format创建模糊规则传入Pattern构建 再将构建好 的条件传入Query构造对象。

3.6分页查询

条件查询带分页,查询email带com条件的分页

    @Test
    public void findPage(){
        Integer page=1;//当前页
        Integer pageSize=3;//每页记录
//条件查询
        String likeName="com";//自定义的常量
        String reges=String.format("%s%s%s", "^.*", likeName, ".*$");//匹配规则

        Pattern pattern=Pattern.compile(reges,Pattern.CASE_INSENSITIVE);//正则匹配规则--pattern的常量
        Query query =new Query(Criteria.where("email").regex(pattern));
        //查询集合记录总数
        long count = mongoTemplate.count(query, Student.class);
        //分页查询
        /**
         * query.skip((page - 1) * pageSize) 获取到开始分页的位置下标 
         * 例如第一页 0*3=0从第0个记录开始
         * 例如第二页 1*3=3从下标第三个记录开始
         * limit(pageSize)限制每页的记录
         */
        List<Student> studentList = mongoTemplate.find(query.skip((page - 1) * pageSize).limit(pageSize), Student.class);

        System.out.println("记录总数"+count);
        for (Student s:studentList) {
            System.out.println("分页数据:"+s);
        }
    }

 详细看注释理解

4. 修改操作

 这是要来的数据

    @Test
    public void updataStudent(){
        //查询id
        Student byId = mongoTemplate.findById("6204969434c3ed66b12eb658", Student.class);
//        设置值
        byId.setName("updataName");
        //        保存修改
        Query query=new Query(Criteria.where("_id").is(byId.getId()));
        Update update=new Update();
        update.set("name",byId.getName());
        UpdateResult updateResult = mongoTemplate.upsert(query, update, Student.class);
//        获取修改就记录数
        long modifiedCount = updateResult.getModifiedCount();
        System.out.println("记录数:"+modifiedCount);

    }

先根据id查询记录然后设置记录的其他值 这个时候切记不可以直接保存过着插入数据因为没有这样的方法

我们需要通过query设置一个条件构造器并且调用updata的核心包的方法来进行更新操作,还有更多方法详细需要阅读,核心包封装好的方法。

查看结果

 5.删除操作

 @Test
    public void delStudent(){
        Query query =new Query(Criteria.where("_id").is("6204969434c3ed66b12eb658"));
        DeleteResult result=mongoTemplate.remove(query,Student.class);

        long deletedCount = result.getDeletedCount();
        //=1成功  =0失败
        System.out.println("记录数:"+deletedCount);
    }

原理同上

 

 结果已经找不到updataNnam的记录了

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐