@Override
public ResultListPO findAll(Long userId, int pageNo, int pageSize, String searchType, String searchContext) {
// 1.构造自定义查询条件
Specification<DataLibraryPO> queryCondition = (root, criteriaQuery, criteriaBuilder) -> {
List<Predicate> predicateList = new ArrayList<>();
//2.设置查询条件
if (searchType != null) {
if (searchType.equals("全部")) {
Expression<String> arg1 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("tableEName"), ""), criteriaBuilder.coalesce(root.get("tableCName"), ""));
Expression<String> arg2 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("dltId"), ""), criteriaBuilder.coalesce(root.get("groupName"), "0"));
Expression<String> arg3 = criteriaBuilder.concat(criteriaBuilder.coalesce(root.get("listOrder"), "0"), criteriaBuilder.coalesce(root.get("memo"), "0"));
Expression<String> arg4 = criteriaBuilder.concat(arg1, arg2);
Expression<String> arg5 = criteriaBuilder.concat(arg3, arg4);
//如果查询全部,则需要拼接所有参数
predicateList.add(criteriaBuilder.like(arg5, "%" + searchContext + "%"));
} else if (searchType.equals("createdAt") || searchType.equals("updatedAt")) {
String[] times = searchContext.split("-");
predicateList.add(criteriaBuilder.between(root.get(searchType), times[0], times[1]));
} else {
predicateList.add(criteriaBuilder.like(root.get(searchType), "%" + searchContext + "%"));
}
}
//3.设置固定查询条件,如用户id,等。
predicateList.add(criteriaBuilder.like(root.get("userId"), userId.toString()));
return criteriaBuilder.and(predicateList.toArray(new Predicate[0]));
};
//4.设置排序方式
Sort.Direction sort = Sort.Direction.ASC;
//5.设置分页方式
//PageRequest继承于AbstractPageRequest并且实现了Pageable
//获取PageRequest对象 index:页码 从0开始 size每页容量 sort排序方式 "id"->properties 以谁为准排序
Pageable pageable = PageRequest.of(pageNo - 1, pageSize, sort, "listOrder");
//6.查询
Page<DataLibraryPO> page = dao.findAll(queryCondition, pageable);
//7.格式化数据
ResultListPO resultListPO = new ResultListPO();
resultListPO.setPageSize(pageSize);
resultListPO.setPageNo(pageNo);
resultListPO.setTotalCount(page.getTotalElements());
resultListPO.setTotalPages(page.getTotalPages());
resultListPO.setContent(page.getContent());
return resultListPO;
}
Spring JPA实现多条件查询,全部条件查询
最新推荐文章于 2023-09-01 17:27:28 发布