服务器之家

服务器之家 > 正文

Java简单高效实现分页功能

时间:2020-08-30 10:39     来源/作者:程序零世界

今天想说的就是能够在我们操作数据库的时候更简单的更高效的实现,现成的CRUD接口直接调用,方便快捷,不用再写复杂的sql,带吗简单易懂,话不多说上方法

1、Utils.java工具类中的方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/** 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、实现类

这里查询相关参数是前端传的,所以用默认值了,查询条件可以是多条件动态,排序也可以是动态的,只要传排序字段和排序方向对号入座即可。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@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

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部