Java简单高效实现分页功能
作者:程序零世界 时间:2022-05-24 13:56:02
今天想说的就是能够在我们操作数据库的时候更简单的更高效的实现,现成的CRUD接口直接调用,方便快捷,不用再写复杂的sql,带吗简单易懂,话不多说上方法
1、Utils.java工具类中的方法
/** 2 * 获取Sort
*
* @param direction - 排序方向
* @param column - 用于排序的字段
*/
public static Sort getSort(String direction,String column){
Sort sort = null;
if(column == null || column == "") return null;
if(direction.equals("asc")||direction.equals("ASC")){
sort = Sort.by(Sort.Direction.ASC,column);
}else {
sort = Sort.by(Sort.Direction.DESC,column);
}
return sort;
}
/**
* 获取分页
* @param pageNumber 当前页
* @param pageSize 页面大小
* @param sort 排序;sort为空则不排序只分页
* @return 分页对象
*/
public static Pageable getPageable(int pageNumber,int pageSize,Sort sort){
if(sort!=null){
return PageRequest.of(pageNumber,pageSize,sort);
}
return PageRequest.of(pageNumber,pageSize);
}
/**
* 判断String是否为空
* @param str
* @return
*/
private static boolean isEmpty(String str){
if(str.equals(null)||str.equals("")) return true;
return false;
}
2、实现类
这里查询相关参数是前端传的,所以用默认值了,查询条件可以是多条件动态,排序也可以是动态的,只要传排序字段和排序方向对号入座即可。
@Override
public Page<User> findAll() {
// 创建测试对象
User user = new User();
user.setName("1");
Sort sort = Utils.getSort("asc","name");
Pageable pageable = Utils.getPageable(0,5,sort);
// 调用组装查询条件方法
Specification<User> spec = getSpecification(user);
return userRepository.findAll(spec,pageable);
}
/**
* 组装查询条件
* @param user -查询相关对象
* @return 返回组装过的多查询条件
*/
private Specification<User> getSpecification(User user) {
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
List<Predicate> predicates = new ArrayList<>();
// 判断条件不为空
if(!Utils.isEmpty(user.getName())){
predicates.add(criteriaBuilder.like(root.get("name"),user.getName()));
}
return criteriaQuery.where(predicates.toArray(new Predicate[predicates.size()])).getRestriction();
}
};
return specification;
}
3.repository类中这么写
@Repository
public interface UserRepository extends JpaRepository<User, Integer>, JpaSpecificationExecutor<User> {}
来源:https://www.cnblogs.com/MonsterJ/p/13567857.html
标签:Java,分页,功能
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java冒泡排序及优化介绍
2023-11-11 13:05:51
SpringBoot+JSON+AJAX+ECharts+Fiddler实现前后端分离开发可视化
2021-11-12 14:49:17
![](https://img.aspxhome.com/file/2023/2/61562_0s.png)
Java Spring5学习之JdbcTemplate详解
2023-11-25 20:17:23
![](https://img.aspxhome.com/file/2023/2/60412_0s.png)
mybatis-plus 如何判断参数是否为空并作为查询条件
2022-09-14 22:05:03
![](https://img.aspxhome.com/file/2023/8/61078_0s.jpg)
Java泛型机制与反射原理相关知识总结
2023-11-11 06:02:15
![](https://img.aspxhome.com/file/2023/4/58914_0s.jpg)
Java monitor机制使用方法解析
2023-11-09 11:25:56
![](https://img.aspxhome.com/file/2023/3/58563_0s.png)
Android之使用Bundle进行IPC详解
2023-09-27 22:44:56
必须要学会的JMM与volatile
2021-07-30 14:07:53
![](https://img.aspxhome.com/file/2023/2/61932_0s.png)
Java封装公共Result结果返回类的实现
2023-06-17 08:47:47
![](https://img.aspxhome.com/file/2023/2/57502_0s.jpg)
java多线程通过CompletableFuture组装异步计算单元
2023-07-19 10:15:42
![](https://img.aspxhome.com/file/2023/0/57620_0s.jpg)
feign客户端设置超时时间操作
2023-07-01 19:16:32
![](https://img.aspxhome.com/file/2023/4/62514_0s.jpg)
Spark调优多线程并行处理任务实现方式
2023-08-21 15:43:53
详解APP微信支付(java后台_统一下单和回调)
2023-11-10 17:26:42
![](https://img.aspxhome.com/file/2023/3/59153_0s.png)
教你怎么用Java数组和链表实现栈
2023-10-29 08:13:57
![](https://img.aspxhome.com/file/2023/0/58720_0s.png)
java字符串相似度算法
2023-11-26 12:33:25
Java之Rsync并发迁移数据并校验详解
2023-07-17 23:01:22
Struts2学习笔记(8)-Result常用类型
2023-06-05 11:10:19
JavaFX实现简单日历效果
2023-05-16 08:43:30
![](https://img.aspxhome.com/file/2023/5/61325_0s.jpg)
对Jpa中Entity关系映射中mappedBy的全面理解
2023-07-25 03:48:39
Windows下Java环境变量配置详解
2022-02-04 05:56:02