spring data jpa多条件查询
主要是工作中用到的关于jpa的条件查询,使用了Specification的Predicate(断言查询)条件查询代替原生sql或@Query注解:
- 记录一下工作时的代码片段,这里用到了一个嵌套的子查询
/**
* 展示列表和条件查询(多条件查询)
* @param status
* @param createTime
* @param orderNum
* @param modelName
* @param pageable
* @return
*/
@Override
public Page<OrderVO> getAllOrderTaking(String status, String createTime, String orderNum, String modelName, Pageable pageable) {
Specification<Order> specification = new Specification<Order>() {
@Override
public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
Predicate p1 = criteriaBuilder.equal(root.get("status"),Order.Status.valueOf("待审核"));
Predicate p2 = criteriaBuilder.equal(root.get("status"),Order.Status.valueOf("处理中"));
Predicate p3 = criteriaBuilder.equal(root.get("status"),Order.Status.valueOf("重做"));
Predicate predicate1 = null;
Predicate predicate2 = null;
if(StringUtils.isNotEmpty(modelName) || StringUtils.isNotEmpty(status) || StringUtils.isNotEmpty(createTime) || StringUtils.isNotEmpty(orderNum)){
if(null != status){
predicates.add(criteriaBuilder.equal(root.get("status"),Order.Status.valueOf(status)));
}
if(null != modelName){
Subquery<String> categoryName = criteriaQuery