SpringBoot中根據不同查詢條件,獲取list列表。
@Component
public class QuerySpecifications {}
(1)根據商戶,查詢商品全部列表
public Specification<Goods> fieldOwnerGoods(User owner) {
return new Specification<Goods>() {
@Override
public Predicate toPredicate(Root<Goods> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return criteriaBuilder.equal(root.get("owner"), owner);
}
};
}
@Service 中使用方法
public DataTablesOutput<Goods> list(DataTablesInput input, User owner) {
DataTablesOutput<Goods> output = goodsRepository.findAll(input, querySpecifications.goodsForOwner(owner));
log.debug("{}", output);
return output;
}
(2)根據不同的支付狀態進行查詢,獲取list列表
PayState 支付狀態-- 0:未支付,1:已支付,2:已取消
way 訂單來源--0:后台 1:手機端
查詢條件:(1)支付狀態為1的 (2)支付狀態為1,訂單狀態來源為0 (3)支付狀態為2 (4)商戶名稱下的訂單
public Specification<com.ishare.football.model.Order> orderForOwner(User owner) {
return new Specification<Order>() {
@Override
public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = Lists.newArrayList();
Predicate predicate = criteriaBuilder.equal(root.get("payState"), 1);
Predicate predicate6 = criteriaBuilder.equal(root.get("payState"), 2);
Predicate predicate1 = criteriaBuilder.equal(root.get("payState"), 0);
Predicate predicate2 = criteriaBuilder.equal(root.get("way"), 1);
Predicate predicate3 = criteriaBuilder.and(predicate1, predicate2);
Predicate predicate4 = criteriaBuilder.or(predicate, predicate3, predicate6);
Predicate predicate5 = criteriaBuilder.equal(root.get("fieldSchedule").get("field").get("owner"), owner);
return criteriaBuilder.and(predicate4, predicate5);
}
};
}
@Service 中使用方法
public DataTablesOutput<Order> list(DataTablesInput input, User user) {
input.addOrder("fieldSchedule.start",false);//排序方法,按照場地開始時間排序,false 倒敘,true 正序
DataTablesOutput<Order> output = orderRepository.findAll(input, querySpecifications.orderForOwner(user));
log.debug("{}", output);
return output;
}
(3)多個列表,查詢條件不同,放到一個方法里
public Specification<com.ishare.football.model.Order> orderForOwnerAndPayState(User owner, int single) {
return new Specification<Order>() {
@Override
public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = Lists.newArrayList();
//single:0 待校驗,1:已付款,2:已取消,3:待付款
Predicate predicate = criteriaBuilder.equal(root.get("fieldSchedule").get("field").get("owner"), owner);
if(single == 0){
Predicate predicate1 = criteriaBuilder.equal(root.get("state"), 0);
Predicate predicate2 = criteriaBuilder.equal(root.get("payState"), 1);
Predicate predicate3 = criteriaBuilder.equal(root.get("way"), 0);
Predicate predicate4 = criteriaBuilder.and(predicate1, predicate2,predicate3);
return criteriaBuilder.and(predicate, predicate4 );
}else if(single == 1){
Predicate predicate1 = criteriaBuilder.equal(root.get("payState"), 1);
return criteriaBuilder.and(predicate, predicate1 );
}else if(single == 2){
Predicate predicate1 = criteriaBuilder.equal(root.get("payState"), 2);
return criteriaBuilder.and(predicate, predicate1 );
}else if(single == 3){
Predicate predicate1 = criteriaBuilder.equal(root.get("payState"), 0);
Predicate predicate2 = criteriaBuilder.equal(root.get("way"), 1);
Predicate predicate3 = criteriaBuilder.and(predicate1, predicate2);
return criteriaBuilder.and(predicate, predicate3 );
}else{
return null;
}
/*return criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));*/
}
};
}
@Service 中使用方法
public DataTablesOutput<Order> listByPayState(DataTablesInput input, User owner, final int single) {
input.addOrder("fieldSchedule.start",false);
DataTablesOutput<Order> output = orderRepository.findAll(input, querySpecifications.orderForOwnerAndPayState(owner, single));
log.debug("{}", output);
return output;
}
