Java简单高效实现分页功能

 更新时间:2020年08月29日 09:19:14   作者:程序零世界  
这篇文章主要介绍了Java简单高效实现分页功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

今天想说的就是能够在我们操作数据库的时候更简单的更高效的实现,现成的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> {}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java 中泛型 T 和 ? 的区别详解

    Java 中泛型 T 和 ? 的区别详解

    本文主要介绍了Java 中泛型 T 和 ? 的区别,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • Java操作MongoDB插入数据进行模糊查询与in查询功能

    Java操作MongoDB插入数据进行模糊查询与in查询功能

    今天小编就为大家分享一篇关于Java操作MongoDB插入数据进行模糊查询与in查询功能,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • mybatisPlus返回Map类型的集合

    mybatisPlus返回Map类型的集合

    本文主要介绍了mybatisPlus返回Map类型的集合,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • springBoot前后端分离项目中shiro的302跳转问题

    springBoot前后端分离项目中shiro的302跳转问题

    这篇文章主要介绍了springBoot前后端分离项目中shiro的302跳转问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • springmvc数据的封装过程详解

    springmvc数据的封装过程详解

    这篇文章主要介绍了springmvc数据的封装过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Spring中@Value注解获取不到配置值问题及解决

    Spring中@Value注解获取不到配置值问题及解决

    这篇文章主要介绍了Spring中@Value注解获取不到配置值问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • Java xml数据格式返回实现操作

    Java xml数据格式返回实现操作

    这篇文章主要介绍了Java xml数据格式返回实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • SpringBoot多环境打包与配置文件排除实践记录

    SpringBoot多环境打包与配置文件排除实践记录

    本文介绍了SpringBoot项目多环境打包与配置文件排除实践,包括多环境配置的实现方法、打包时排除配置文件的方法以及动态加载外部配置文件的最佳实践,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • 如何用java实现分页查询

    如何用java实现分页查询

    这篇文章主要介绍了如何用java实现分页查询,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • 2种Java删除ArrayList中的重复元素的方法

    2种Java删除ArrayList中的重复元素的方法

    这篇文章主要介绍了2种Java删除ArrayList中的重复元素的方法,感兴趣的朋友可以参考下
    2015-08-08

最新评论