Java-springdata JPA 復雜查詢與排序問題


使用springdataJPA 來做動態篩選復雜查詢並且排序
public List<UsmInfo> search(Map<String, Integer> map) {
//拼接條件對象
Specification<UsmInfo> spc = new Specification<UsmInfo>() {
//root 需要操作的跟對象 通過此對象獲取對象中的屬性 最終來拼接查詢條件
// CriteriaQuery 頂級查詢對象
//CriteriaBuilder 條件構建對象
@Nullable
@Override
public Predicate toPredicate(Root<UsmInfo> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
//定義一個集合 存放條件
List<Predicate> predicateList = new ArrayList<>();
//問題或者建議 "asktype":1;
// 系統類型 java安卓ios "system":1-5;
//項目系統 product ;
//嚴重程度 severity 為評估 嚴重 致命 一般 輕微
//處理人 manager
//處理狀態 statetype
Integer asktype = map.get("asktype");
Integer system = map.get("system");
Integer product = map.get("product");
Integer severity = map.get("severity");
Integer managername = map.get("manager");
Integer statetype = map.get("statetype");
if (null != asktype) {
Predicate p1 = cb.equal(root.get("asktype").as(Integer.class), asktype);
predicateList.add(p1);
}
if (null != system) {
Predicate p2 = cb.equal(root.get("system").as(Integer.class), system);
predicateList.add(p2);
}
if (null != product) {
Predicate p3 = cb.equal(root.get("product").as(Integer.class), product);
predicateList.add(p3);
}
if (null != severity) {
Predicate p4 = cb.equal(root.get("severity").as(Integer.class), severity);
predicateList.add(p4);
}
if (null != managername) {
Predicate p5 = cb.equal(root.get("manager").as(Integer.class), managername);
predicateList.add(p5);
}
if (null != statetype) {
Predicate p6 = cb.equal(root.get("statetype").as(Integer.class), statetype);
predicateList.add(p6);
}
//判斷條件為空
if (predicateList == null || predicateList.size() == 0) {
return null;
}
//定一個數組來接收條件
Predicate[] predicate = new Predicate[predicateList.size()];
//不為空 將List轉為Predicate[]返回
Predicate[] predicateArray = predicateList.toArray(predicate);
//把predicate應用到query中
query.where(cb.and(predicateArray));
query.orderBy(cb.desc(root.get("firsttime").as(Integer.class)));
return query.getRestriction();
}


免責聲明!

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



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