日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总结MongoDB采用MongoRepository进行查询

發布時間:2023/12/8 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总结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进行查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。