一、MongoRepository
Spring Data 提供了对 mongodb 数据访问的支持,只需继承 MongoRepository 类,并按照 Spring Data 规范就可以实现对 mongodb 的操作。
SpringData 方法定义规范:
注意事项:
- 不能随便声明,必须要符合一定的规范
- 查询方法以find、read、get开头
- 涉及条件查询时,条件的属性用条件关键字连接
- 条件属性首字母需要大写
- 支持属性的级联查询,但如果当前类有符合条件的属性则优先使用,而不使用级联属性;若需要使用级联属性,则属性之间使用_强制进行连接
准备步骤:
第一步,创建接口,继承 MongoRepository。
创建接口继承 MongoRepository ,并用 @Repository
标识持久层。
@Repository
public interface UserRepository extends MongoRepository<User,String> {
}
MongoRepository 其中有两个泛型 <T,TD>,T为仓库保存的bean类,TD为该bean的唯一标识的类型,一般为ObjectId 。
第二步,自动注入MongoRepository。
@Autowired
private MongoRepository mongoRepository;
二、实现 CURD
1.添加一个文档
/**
* 1.添加
*/
@Test
public void createUser() {
User user = new User();
user.setName("parker");
user.setNumber(4);
user.setPosition("defender");
User insert_user = (User) mongoRepository.save(user);
System.out.println(insert_user);
}
2.查询所有
/**
* 2.查询所有
*/
@Test
public void findAll() {
List list = userRepository.findAll();
System.out.println(list);
}
3.通过id查询
/**
* 3.id查询
*/
@Test
public void findById() {
User user = (User) userRepository.findById("63cbf57d92912c3d57276510").get();
System.out.println(user);
}
4.条件查询
/**
* 4.条件查询
*/
@Test
public void findUserList1() {
// select * from User where name="parker" and number=7
//模拟构造条件
User user = new User();
user.setNumber(9);
user.setPosition("striker");
Example<User> userExample = Example.of(user);
//查询
List list = userRepository.findAll(userExample);
System.out.println(list);
}
5.模糊查询
/**
* 5.模糊查询
*/
@Test
public void findUserList2() {
// select * from User where name like "park"
//创建匹配器,设置查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建匹配器对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //设置默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //设置默认大小写忽略方式:true为忽略大小写
//模拟构造条件
User user = new User();
user.setName("park");
Example<User> userExample = Example.of(user,matcher);
//查询
List list = userRepository.findAll(userExample);
System.out.println(list);
}
6.分页查询
/**
* 6.分页查询
*/
@Test
public void findUserPage() {
//构造排序器,设置排序方法
Sort sort = Sort.by(Sort.Direction.ASC,"number");
//构造分页器,设置分页参数
//返回类型建议为Pageable接口,page=0代表第一页
Pageable pageable = PageRequest.of(0, 5, sort);
//创建匹配器,设置查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建匹配器对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //设置默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //设置默认大小写忽略方式:true为忽略大小写
//模拟构造条件,不设置属性代表不进行条件匹配
User user = new User();
Example<User> userExample = Example.of(user,matcher);
//查询
Page<User> page = userRepository.findAll(userExample, pageable);
System.out.println("总页数为:"+page.getTotalPages());
System.out.println("查询的该页数据为:"+page.getContent());
}
7.修改
增加和修改都使用的是 save() 方法,save方法会判断传进来的实体对象是否有 _id
值。若无 ID ,则执行增加操作;若已有 ID,则转而去执行更新修改操作。
/**
* 7.修改
*/
@Test
public void updateUser(){
User user = (User) userRepository.findById("63cbf57d92912c3d57276510").get();
user.setNumber(7);
user.setPosition("striker");
User update_user = (User) userRepository.save(user);
System.out.println(update_user);
}
8.删除
/**
* 8.删除
*/
@Test
public void deleteUser(){
userRepository.deleteById("63cbf57d92912c3d57276510");
}