JPA动态分页查询
本次项目开发用到了JPA,之前只是使用过mybatis,所以针对JPA的动态分页查询这块不是很了解,在这里记录一下。
public BasePage<HistoryVehiclePassDO> getDetails(Condition content ) {
if (ObjectUtils.isNotEmpty(content )) {
BasePage<HistoryVehiclePassDO> basePage = new BasePage<>();
basePage.setTotal(0L);
Pageable pageable = PageRequest.of(content.getPageNo() - 1, BusinessConstant.PAGE_SIZE);
Page page = historyVehiclePassRepository.findAll((root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicateList = new ArrayList<>();
if (content.getLibCode() != null) {
predicateList.add(criteriaBuilder.equal(root.get("libCode"), content.getLibCode()));
}
if (content.getCrossName() != null) {
predicateList.add(criteriaBuilder.equal(root.get("crossName"), content.getCrossName()));
}
if (content.getWeekDay() != null) {
predicateList.add(criteriaBuilder.equal(root.get("weekDay"), content.getWeekDay()));
}
if (content.getTimeSlot() != null) {
predicateList.add(criteriaBuilder.equal(root.get("timeSlot"), content.getTimeSlot()));
}
if (content.getModelPeriod() != null) {
Date start = getTargetDay(content.getModelPeriod());
Date end = new Date();
predicateList.add(criteriaBuilder.between(root.get("timeDate"), start, end));
}
if (content.getLibCode() != null) {
predicateList.add(criteriaBuilder.equal(root.get("libCode"), content.getLibCode()));
}
if (content.getVehicleNo()!=null) {
predicateList.add(criteriaBuilder.and(criteriaBuilder.like(root.get("vehicleNo"), "%" + content.getVehicleNo() + "%")));
}
return criteriaBuilder.and(
predicateList.toArray(new Predicate[predicateList.size()]));
}, pageable);
if (null != page && page.getSize() > 0) {
List<HistoryVehiclePassDO> historyVehiclePassVOList = page.getContent();
basePage.setList(historyVehiclePassVOList);
basePage.setTotal(page.getTotalElements());
}
return basePage;
}
return null;
}
还没有评论,来说两句吧...