1.导入maven依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
2.配置yml
spring:
application:
name: mongo
data:
mongodb:
# mongo开启auth后需要用户名、密码,不开启则不需要用户名,密码
uri: mongodb://root:root@localhost:27017
database: db_test
3.编写实体类,指明类对应于Mongo数据库中的集合
@Data //此注解会生成getter和setter方法
@ToString //此注解会生成ToString方法
// @data @ToString是Lombok下的注解,可自动生成getter、setter、tostring方法
@Document(collection = "test") //指明此类对应db_test数据库下的test集合
public class Test {
//id 对应数据库中的主键(_id,自动生成)
@Id
private String id;
private String name;
}
4.写dao接口,继承MongoRepository<T,ID>,其中T为要查询的实体类,ID为主键类型
import org.springframework.data.mongodb.repository.MongoRepository;
public interface TestRepository extends MongoRepository<Test,String> {
//根据名称查询
Test findByName(String name);
}
查看TestRepository接口中的方法
5.测试
// 注入TestRepository对象
@Autowired
TestRepository TestRepository ;
// 测试查询所有方法
@Test
public void testFindAll(){
List<Test> list= TestRepository .findAll();
System.out.println(list);
}
// 分页查询
@Test
public void testFindPage(){
//分页参数
int page = 0; // 页数从0开始,代表第一页
int size = 10; // 页面大小
// 返回值类型可以用Pageable接收,因为PageRequest的父类实现了Pageable接口,这里用到了多态
//Pageable pageable = PageRequest.of(page,size);
PageRequest pageable = PageRequest.of(page,size);
Page<Test> page= TestRepository.findAll(pageable);
System.out.println(page.getContent());
}
// 更新数据
@Test
public void testUpdate() {
//查询对象
Optional<Test> optional = TestRepository.findById("数据库中的主键Id(ObjectId类型)");
// 判断optical是否为空
/**
源码:
public boolean isPresent() {
return value != null;
}
*/
if(optional.isPresent()){
Test test= optional.get();
//设置要修改值
test.setName("test01");
//...
// 保存到数据库中
Test save = TestRepository.save(test);
System.out.println(save);
}
}
// 添加数据
@Test
public void testSave(){
Test test = new Test();
test.setName("test02");
Test save = TestRepository.save(test);
System.out.println(save);
}
// 自定义根据name查询
@Test
public void testfindByname(){
Test test= TestRepository.findByName("test02");
System.out.println(test);
}
//
- 自定义查询方法
Spring Data mongodb也提供自定义方法的规则,如下:
按照findByXXX,findByXXXAndYYY、countByXXXAndYYY等规则定义方法,实现查询操作。
public interface TestRepository extends MongoRepository<Test,String> {
/// 根据name和XXX查询
Test findByNameAndXxx(String name,T Xxx);
// 根据name和XXX查询总数
int countByNameAndXxx(String name,T Xxx);
// 根据name和XXX进行分页查询
Page<Test> findByNameAndXxx(String name,T Xxx,Pageable pageable);
// 根据name进行模糊查询,Xxx进行精确查询
// 相当于 .....where name like %#{name}% and Xxx = #{Xxx}
Test findByNameLikeAndXxx(String name,T Xxx);
}
7.自定义条件匹配器
@Test
public void testFindAllByExample(){
int page = 0;
int size = 10;
// 条件值对象
Test test = new Test();
test.setName("test");
// 定义条件匹配器
ExampleMatcher matcher = ExampleMatcher.matching()
// 自定义查询条件为模糊查询,查询包含name为test(因为上面设置的test.setName("test"))属性的结果
// GenericPropertyMatchers中的静态方法为匹配条件
// 后面可以继续.withMatcher("属性名",匹配条件).withMatcher("属性名",匹配条件)......
.withMatcher("name",GenericPropertyMatchers.contains());
// Example中的泛型指定为条件的类型
Example<Test> example = Example.of(test,matcher);
// 分页查询
Pageable pageable = PageRequest.of(page,size);
// 根据条件进行查询,查询第一页的10条数据
testRepository.findAll(example,pageable);
System.out.println(list);
}