动态查询,分页,含子查询(root.join),去重:
public Page<Order> searchOrderByPage(String supplierNo, long date, Constant.OrderStatus status, int pageIndex, int pageSize) {
LocalDateTime localDateTime = ConverterUtil.getTimeByTimestamp(date);
LocalDateTime start = getStartLocalDateTime(localDateTime);
LocalDateTime end = getEndLocalDateTime(localDateTime);
Page<OrderEntity> orderEntities = orderDao.findAll((root, criteriaQuery, criteriaBuilder) -> {
Join<OrderEntity,OrderItemEntity> join = root.join(OrderEntity_.orderItems);
Predicate condition = criteriaBuilder.and(
criteriaBuilder.greaterThanOrEqualTo(root.get(OrderEntity_.updateTime),start),
criteriaBuilder.lessThanOrEqualTo(root.get(OrderEntity_.updateTime),end)
);
if(!StringUtils.isEmpty(supplierNo)) {
Predicate condition2 = criteriaBuilder.equal(join.get(OrderItemEntity_.supplierNo),supplierNo);
condition = criteriaBuilder.and(condition,condition2);
}
if(status!=null){
Predicate condition2 = criteriaBuilder.equal(root.get(OrderEntity_.orderStatus),status);
condition = criteriaBuilder.and(condition,condition2);
}
criteriaQuery.distinct(true);
return criteriaQuery.where(condition).getRestriction();
},new PageRequest(pageIndex,pageSize));
return orderEntities.map(ConverterUtil::getOrder);
}
动态查询且分页:
public Page<OprLog> searchOprLogsByPage(String oprName, long startDate, long endDate, Constant.OprLogType oprLogType, int pageIndex, int pageSize) {
LocalDateTime localDateTimeStart = ConverterUtil.getTimeByTimestamp(startDate);
LocalDateTime localDateTimeEnd = ConverterUtil.getTimeByTimestamp(endDate);
Instant start = getStartInstant(localDateTimeStart);
Instant end = getEndInstant(localDateTimeEnd);
Page<OprLogEntity> oprLogEntities = oprLogDao.findAll((root, criteriaQuery, criteriaBuilder) -> {
Predicate condition = criteriaBuilder.and(
criteriaBuilder.greaterThanOrEqualTo(root.get(OprLogEntity_.createTime),start),
criteriaBuilder.lessThanOrEqualTo(root.get(OprLogEntity_.createTime),end)
);
if(oprName != null){
Predicate condition2 = criteriaBuilder.equal(root.get(OprLogEntity_.oprName),oprName);
condition = criteriaBuilder.and(condition,condition2);
}
if(oprLogType != null) {
Predicate condition2 = criteriaBuilder.equal(root.get(OprLogEntity_.oprLogType),oprLogType);
condition = criteriaBuilder.and(condition,condition2);
}
return criteriaQuery.where(condition).getRestriction();
},new PageRequest(pageIndex,pageSize));
return oprLogEntities.map(ConverterUtil::getOprLog);
}