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