JPA简单分页条件查询
分页条件查询
Controller层
@PostMapping("getUserPage")
public Page getUserPage(@RequestBody Map<String,Object> map){
return userService.getUserPage(map);
}
Service层
public Page getUserPage(Map<String, Object> map) {
String orderBy = "id";
Boolean isAsc = true;
Boolean isDel=null;
int pages = Integer.valueOf(map.get("pages").toString());
map.remove("pages");
int size = Integer.valueOf(map.get("size").toString());
map.remove("size");
if (map.get("orderBy") != null) {
orderBy = (String) map.get("orderBy");
map.remove("orderBy");
}
if (map.get("isAsc") != null) {
isAsc = (Boolean) map.get("isAsc");
map.remove("isAsc");
}
if (map.get("isDel") != null) {
isDel = (Boolean) map.get("isDel");
map.remove("isDel");
}
Boolean finalIsDel = isDel;
Specification<User> spec = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
Predicate res = null;
if (finalIsDel!= null) {
res = cb.equal(root.get("isDel"), finalIsDel);
}
for (String entryKey : map.keySet()) {
Path<Object> fuck = root.get(entryKey);
Predicate temp = cb.like(fuck.as(String.class), "%" + (String) map.get(entryKey) + "%");
if (res == null) {
res = temp;
continue;
}
res = cb.and(res, temp);
}
return res;
}
};
Sort sort = Sort.by(Sort.Direction.ASC, orderBy);
if (!isAsc) {
sort = Sort.by(Sort.Direction.DESC, orderBy);
}
PageRequest page = PageRequest.of(pages - 1, size, sort);
Page<User> one = userRepository.findAll(spec, page);
System.out.println(one.getTotalElements());
return one;
}
建议接参写个dto,别直接map
开发一时爽,维护火葬场
还没有评论,来说两句吧...