Java操作MongoDB采用MongoRepository进行条件查询
1) 实体类实现Serializable接口
@Document(collection = "Memo") public class Memo implements Serializable {}
2) DAO继承MongoRepository
@Repository public interface MemoRepository extends MongoRepository, String> { ArrayList findByUserId(String userId); }
3) 将DAO的Repository注入到Service类(Controller)
@Api(description = "备忘录相关接口") @RestController public class MemoController { private final MemoRepository memoRepository; @Autowired public MemoController(MemoRepository memoRepository) { this.memoRepository = memoRepository; } }
Repository常用条件查询:
1. 查询所有
findAll();
2. 分页
public Page
pageRequest pr = new pageRequest(page-1, rows);
return memoReponsitory.findAll(pr);
}
3. 查询所有数据的数量
long size = memoRepository.count();
int count = Integer.valueOf(String.valueOf(size));
4按实体类属性查询
a.先在DAO层定义方法.
定义方法名的规则:findBy+属性名(首字母大写)
b.在Service中调用该方法
5.根据属性分页
findBy+属性名(参数类型 参数名,Pageable p)
例:Page
@ApiOperation(value="根据qsId获取备忘录列表", notes="根据用户的qsId获取备忘录列表") @RequestMapping(value = "/{qsId}/memos", method = RequestMethod.GET) public ResultData list( @RequestHeader("token") String token, @ApiParam(required = true, value = "qsId") @PathVariable("qsId") String qsId, @RequestParam(defaultValue = "1", name = "page") Integer page, @RequestParam(defaultValue = "20", name = "size") Integer size) { //验证qsId一致 UserDto baseUser = userService.getBaseUserByToken(token); if (!StringUtils.equals(baseUser.getQsId(), qsId)) { throw new ForbiddenException(); } PageRequest pageable = new PageRequest(page-1, size, new Sort(Sort.Direction.DESC, "createAt")); Page注:数据库查询分页后,首页默认是第0页,所以当page的默认值为1时,pageRequest的page参数为page-1memos = memoRepository.findByQsId(qsId, pageable); return ResultData.ok() .putDataValue("memos", memos); }
6.根据属性模糊查询
定义方法名的规则:findBy+属性名(首字母大写)+Like(参数类型 参数名);
例:public Memo findByIdLike(String id);
7. 属性模糊查询+分页
a.DAO定义方法:
public Page
b.Service调用该方法
public List
PageRequest pr = new PageRequest(page-1, rows);
return memoRepository.findByNameLike(name, pr).getContent()
}
8.所有数据返回指定字段
@Query(value= "{'_id': {'$ne':null} }", fields="{'name':1}")
注:value是查询条件,field是指定的返回字段
返回对象的Id自动返回,不用指定
标红区域可用其他MongoDB原子操作命令代替
9.根据属性查询+分页+返回指定字段
@Query(value="{'name':?0}", fields="{'name':1}")
public Page
注:?0 是占位符,其中0表示第一个参数,1表示第二个参数....
field中的1 表示该字段(name)要显示,0表示不显示