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构造对象。