public ResponseBean userLoginLog(@RequestBody HashMap<String, Object> paramMap) {
Integer pageNo;
Integer pageSize;
try {
pageNo = Integer.parseInt((String) paramMap.get("pageNo"));
pageSize = Integer.parseInt((String) paramMap.get("pageSize"));
} catch (Exception e) {
pageNo = (Integer) paramMap.get("pageNo");
pageSize = (Integer) paramMap.get("pageSize");
}
paramMap.remove("pageNo");
paramMap.remove("pageSize");
/**
* 自定义查询条件
* 1. 实现Specification接口(提供泛型;查询的对象类型)
* 2. 实现toPredicate方法(构造查询条件)
* 3. 需要借助方法参数中的两个参数(
* root:获取需要查询的对象属性
* CriteriaBuilder:构造查询条件,内部封装了很多查询条件(模糊匹配,精准匹配)
*/
List<Predicate> listAnd = new ArrayList<>(); //组装and语句
Specification<UserLoginLog> spec = (root, query, criteriaBuilder) -> {
//判断paramMap是否包含startTime和endTime
if (paramMap.containsKey("startTime") && paramMap.containsKey("endTime")) {
listAnd.add(criteriaBuilder.greaterThanOrEqualTo(root.get("operTime").as(String.class), (String) paramMap.get("startTime")));
listAnd.add(criteriaBuilder.lessThanOrEqualTo(root.get("operTime").as(String.class), (String) paramMap.get("endTime")));
//删除startTime和endTime
paramMap.remove("startTime");
paramMap.remove("endTime");
}
paramMap.forEach((k, v) -> {
Path<UserLoginLog> path = root.get(k);
Predicate like = criteriaBuilder.like(path.as(String.class), "%" + v + "%");
listAnd.add(like);
});
return criteriaBuilder.and(listAnd.toArray(new Predicate[listAnd.size()]));
};
/**
* 添加排序Sort
* Sort.Direction.DESC表示降序
* Sort.Direction.ASC表示升序
* properties是指实体类的属性名(不是字段名)
*/
Sort sort = new Sort(Sort.Direction.ASC, "createTime");
/**
* 分页参数Pageable
* 参数1:查询的页码
* 参数2:每页查询的条数
* 参数3:查询结果的排序规则(可选
*/
Pageable pageable = new PageRequest(pageNo, pageSize, sort);
/**
* 分页查询
* 参数1:查询条件Specification
* 参数2:分页参数Pageable
*/
Page<UserLoginLog> page = userLoginLogRepository.findAll(spec, pageable);
PageResults<UserLoginLog> pageResults = new PageResults<>();
pageResults.setTotalRecord(page.getTotalElements());
pageResults.setTotalPage((long) page.getTotalPages());
pageResults.setResult(page.getContent());
return new ResponseBean(ResponseCode.RC00_1000, pageResults);
}
```
sprinboot jpa设置查询条件,排序,分页查询
最新推荐文章于 2024-06-27 11:53:28 发布
本文详细描述了一个使用SpringBoot开发的API,涉及如何接收用户登录日志查询参数,通过Specification接口进行自定义查询条件设置(包括时间范围和模糊搜索),并结合Pageable实现分页查询,返回PageResults对象。
6393

被折叠的 条评论
为什么被折叠?



