spring-data-jpa Specification 拼接复杂查询
2016-04-11 16:42
1201 查看
public Page<ServiceItem> findAll(Map<String, String[]> params, ServiceItemConsumeStatus serviceItemConsumeStatus,ServiceItemStatus serviceItemStatus, Pageable pageable) { return dao.findAll(spec(serviceItemConsumeStatus, serviceItemStatus, params), pageable); } private Specification<ServiceItem> spec(final ServiceItemConsumeStatus serviceItemConsumeStatus, final ServiceItemStatus serviceItemStatus, Map<String, String[]> params) { Collection<SearchFilter> filters = SearchFilter.parse(params).values(); final Specification<ServiceItem> fsp = SearchFilter.spec(filters, ServiceItem.class); Specification<ServiceItem> sp = new Specification<ServiceItem>() { public Predicate toPredicate(Root<ServiceItem> root, CriteriaQuery<?> query, CriteriaBuilder cb) { Predicate pred = fsp.toPredicate(root, query, cb); if (ServiceItemConsumeStatus.可消费.equals(serviceItemConsumeStatus)) { pred = cb.and(pred, cb.gt(root.get("countLeft").as(int.class), 0)); } else if (ServiceItemConsumeStatus.消费完毕.equals(serviceItemConsumeStatus)) { pred = cb.and(pred, cb.le(root.get("countLeft").as(int.class), 0)); } if (serviceItemStatus != null) { pred = cb.and(pred, cb.equal(root.get("status"), serviceItemStatus)); } return pred; } }; return sp; }
相关文章推荐
- 解决办法:Java使用Selenium JAR包没有帮助文档
- Java String和Date的转换
- JDK源码阅读——ArrayList(2)
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver解决方式
- 感觉Idea用起来比eclipse舒服
- Java 如何有效地避免OOM:善于利用软引用和弱引用
- Java进阶学习第二天——CCS与JS入门
- java jdk动态代理与cglib动态代理
- 分享一个获取 当前周的计算方法 时间 Java
- 使用Java创建Json文件
- java中CyclicBarrier简单入门使用
- java生成自己定义的表ID
- Java ZIP压缩和解压缩文件(解决中文文件名乱码问题)
- Java迭代器,iterator与for-each
- spring事务管理
- javaweb学习总结(十五)——JSP基础语法
- Java高级之Lock&Condition实现线程同步通信
- Java 二叉树的实现以及遍历
- Java 二叉树的实现以及遍历
- 注释驱动的 Spring cache 缓存介绍