spring boot jpa 復雜查詢 動態查詢 連接and和or 模糊查詢 分頁查詢


最近項目中用到了jpa,剛接觸的時候有些激動,以前的到層忽然不用寫sql不用去自己實現了,只是取個方法名就實現了,太驚艷了,驚為天人,但是慢慢的就發現不是這么回事了,在動態查詢的時候,不知道怎么操作了,忽然感覺這個框架好笨重,在完成很多基礎的操作提高效率的同時,
過度的封裝也使他用起來不夠靈活,整理了下動態查詢以及and和or的查詢,再次記錄下,利己利人。

dao層只要定義一下findAll(Specification specification,PageRequest pageRequest);就可以用了,實現了動態查詢,and 和or聯合查詢,分頁查詢,以及模糊查詢,基本的需求都可以滿足了,但是如果在復雜些,需要跨表甚至跨庫的話,還是考慮下jdbc把,
不僅效率高也更靈活,加油!
 
 1 @Override
 2 public SispPage<AnnouncementEntity> findAnnouncementList(Integer pageNo, Integer pageSize, String t1, String t2,
   String t3, String t4) {
3 Sort sort = new Sort(Sort.Direction.DESC, "createTime"); 4 if (pageNo <= 1) { 5 pageNo = 0; 6 } else { 7 pageNo -= 1; 8 } 9 PageRequest pageRequest = PageRequest.of(pageNo, pageSize, sort); 10 Specification<A> specification = new Specification<A>() { 11 @Override 12 public Predicate toPredicate(Root<A> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder
          criteriaBuilder) {
13 List<Predicate> predicates = new ArrayList<>(); 14 List<Predicate> predicateOr = new ArrayList<>(); 15 Predicate conditionPre; 16 predicates.add(criteriaBuilder.equal(root.get("成員名稱").as(String.class), 1)); 17 if (StringUtils.isNotBlank(t1)) { 18 predicates.add(criteriaBuilder.like(root.get("成員名稱").as(String.class), "%" + t1+ "%")); 19 } 20 21 if (StringUtils.isNotBlank(t2)) { 22 predicates.add(criteriaBuilder.equal(root.get("成員名稱").as(String.class), t2)); 23 } 24 if (StringUtils.isNotBlank(t3)) { 25 predicates.add(criteriaBuilder.equal(root.get("成員名稱").as(String.class), t3)); 26 } 27 if (StringUtils.isNotBlank(t4)) { 28 predicateOr.add(criteriaBuilder.like(root.get("成員名稱").as(String.class), "%" + t4+ "%")); 29 predicateOr.add(criteriaBuilder.like(root.get("成員名稱").as(String.class), "%" + t4+ "%")); 30 conditionPre = criteriaQuery.where(criteriaBuilder.and(predicates.toArray(new
            Predicate[predicates.size()])),
31 criteriaBuilder.or(predicateOr.toArray(new
            Predicate[predicateOr.size()]))).getRestriction();
32 } else { 33 conditionPre = criteriaBuilder.and(predicates.toArray(new
            Predicate[predicates.size()]));
34 } 35 return conditionPre; 36 } 37 }; 38 39 Page<C> c= announcementDao.findAll(specification, pageRequest); 40 List<C> cList= announcementPage.getContent(); 41 42 43 return cList; 44 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM