Spring Data JPA中的動態查詢 時間日期


功能:Spring Data JPA中的動態查詢 實現日期查詢 
頁面對應的dto類
private String modifiedDate;
//實體類
@LastModifiedDate
protected Calendar modifiedDate;

 
         
 1 public Predicate toPredicate(Root<Infolink> root, CriteriaQuery<?> query, CriteriaBuilder cb) {  2 query.distinct(true);  3 List<Predicate> pl = new ArrayList<Predicate>();  4 Join<Infolink, Infosort> join = (Join<Infolink, Infosort>) root  5 .join(root.getModel().getList("infosorts", Infosort.class), JoinType.LEFT);  6 for (Map f : filters) {  7 String field = f.get("field").toString().trim();  8 String value = f.get("value").toString().trim();  9 if (value != null && value.length() > 0) { 10 if ("infosortId".equalsIgnoreCase(field)) { 11 pl.add(cb.equal(join.get("id"), value)); 12  } 13 if ("infolinkTitle".equalsIgnoreCase(field)) { 14 pl.add(cb.like(root.<String>get(field), "%" + value + "%")); 15  } 16 if ("keyword".equalsIgnoreCase(field)) { 17 pl.add(cb.like(root.<String>get(field), "%" + value + "%")); 18  } 19 if ("summary".equalsIgnoreCase(field)) { 20 pl.add(cb.like(root.<String>get(field), "%" + value + "%")); 21  } 22 if ("user".equalsIgnoreCase(field)) { 23 pl.add(cb.equal(root.<String>get(field), value)); 24  } 25 if ("infolinkType".equalsIgnoreCase(field)) { 26 pl.add(cb.equal(root.<String>get(field), value)); 27  } 28 if ("infolinkState".equalsIgnoreCase(field)) { 29 pl.add(cb.equal(root.<String>get(field), value)); 30  } 31 if ("id".equalsIgnoreCase(field)) { 32 pl.add(cb.equal(root.<String>get(field), value)); 33  } 34 // 日期查詢 35 if ("modifiedDate".equalsIgnoreCase(field)) { 36 // 處理時間 37 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 38  Date startDate; 39  Date endDate; 40 try { 41 startDate = format.parse(value); 42 } catch (ParseException e) { 43 startDate = new Date(946656000000L);// 2000 01 01 44  } 45 endDate = startDate; 46 Calendar calendar = Calendar.getInstance(); 47  calendar.setTime(endDate); 48 calendar.add(Calendar.DATE, 1); 49 endDate = calendar.getTime(); 50 calendar = null; 51 pl.add(cb.between(root.<Date>get(field), startDate, endDate)); 52  } 53  } 54  } 55 pl.add(cb.equal(root.<Integer>get("flag"), 1)); 56 return cb.and(pl.toArray(new Predicate[0])); 57 }
 

效果展示:

================================多條件查詢=================================================

二  有多個條件,我們就可以創建一個Predicate集合,最后用CriteriaBuilder的and和or方法進行組合,得到最后的Predicate對象。
  root參數是我們用來對應實體的信息的。criteriaBuilder可以制作查詢信息。

  CriteriaBuilder對象里有很多條件方法,比如制定條件:某條數據的創建日期小於今天。

 criteriaBuilder.lessThan(root.get("createDate"), today)   //該方法返回的對象類型是Predicate。正是toPredicate需要返回的值。

 創建一個Predicate集合,最后用CriteriaBuilder的and和or方法進行組合,得到最后的Predicate對象。 //and到一起的話所有條件就是且關系,or就是或關系了。

public List<WeChatGzUserInfoEntity> findByCondition(Date minDate, Date maxDate, String nickname){
        List<WeChatGzUserInfoEntity> resultList = null;
        Specification querySpecifi = new Specification<WeChatGzUserInfoEntity>() {
            @Override
            public Predicate toPredicate(Root<WeChatGzUserInfoEntity> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {

                List<Predicate> predicates = new ArrayList<>();
                if(null != minDate){
                    predicates.add(criteriaBuilder.greaterThan(root.get("subscribeTime"), minDate));
                }
                if(null != maxDate){
                    predicates.add(criteriaBuilder.lessThan(root.get("subscribeTime"), maxDate));
                }
                if(null != nickname){
                    predicates.add(criteriaBuilder.like(root.get("nickname"), "%"+nickname+"%"));
                }
                return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
            }
        };
        resultList =  this.weChatGzUserInfoRepository.findAll(querySpecifi);
        return resultList;
    }

相關鏈接:

  1. Spring Data JPA,一種動態條件查詢的寫法

   www.cnblogs.com/derry9005/p/6282571.html

  2. Spring data jpa 復雜動態查詢方式總結

  https://blog.csdn.net/qq_30054997/article/details/79420141

  3. 帶有條件的查詢后分頁和不帶條件查詢后分頁實現

  https://blog.csdn.net/lihuapiao/article/details/48782843

 


免責聲明!

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



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