总结MongoDB采用MongoRepository进行查询
Java操作MongoDB采用MongoRepository進行條件查詢
1) ?實體類實現Serializable接口
@Document(collection = "Memo") public class Memo implements Serializable {}2) DAO繼承MongoRepository<Class<T>,參數類型>, 并定義方法(若MongoRepository自帶方法夠用,可以不定義新方法)
@Repository public interface MemoRepository extends MongoRepository<Memo, String> {ArrayList<Memo> 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<T> queryAllByPage (int page, int rows) throws Exception {
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<Memo> memos = memoRepository.findByQsId(String qsId, Pageable p);
@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<Memo> memos = memoRepository.findByQsId(qsId, pageable); return ResultData.ok().putDataValue("memos", memos); } 注:數據庫查詢分頁后,首頁默認是第0頁,所以當page的默認值為1時,pageRequest的page參數為page-1?
6.根據屬性模糊查詢
定義方法名的規則:findBy+屬性名(首字母大寫)+Like(參數類型 參數名);
例:public Memo findByIdLike(String id);
7. 屬性模糊查詢+分頁
a.DAO定義方法:
public Page<T> findByNameLike(String name, Pageable p);
b.Service調用該方法
public List<Memo> queryByNameAndPage(int page, int rows, String name) throws Exception {
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<Person> findByNameLike(String name, Pageable p);
注:?0 是占位符,其中0表示第一個參數,1表示第二個參數....
field中的1 表示該字段(name)要顯示,0表示不顯示
總結
以上是生活随笔為你收集整理的总结MongoDB采用MongoRepository进行查询的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 汇编语言与高级语言的区别
- 下一篇: LeetCode-数据库题(二) (52