千家信息网

Java中如何实现分页功能

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本文小编为大家详细介绍"Java中如何实现分页功能",内容详细,步骤清晰,细节处理妥当,希望这篇"Java中如何实现分页功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一
千家信息网最后更新 2025年02月01日Java中如何实现分页功能

本文小编为大家详细介绍"Java中如何实现分页功能",内容详细,步骤清晰,细节处理妥当,希望这篇"Java中如何实现分页功能"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一、limit关键字

通过使用这个方法我们来看下相关的service层的代码:

@Service@Transactionalpublic class ImplStudentService implements StudentService {@Resourceprivate  StudentDao  studentDao;    @Override    public List  selectAllStudent(String province, Integer offset, Integer limit) {        return studentDao.selectAll(province,offset,limit);    }}

对应的相关 sql 语句的代码如下所示:

select * from student where province = #{province}  limit #{offset},#{limit}

二、hibernate分页

首先我们来看下service层的代码:

  @Override  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {  // 分页数据  int[] startIdAndCount = new int[2];  startIdAndCount[0] = pageNo * pageSize;  startIdAndCount[1] = pageSize;  return studentDao.selectStudentsByPage(startIdAndCount); }

跟 limit 关键字方法不同的是,在 hibernate 方法中使用的是 dao层,代码如下所示:

  @Override  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {  // 分页数据  int[] startIdAndCount = new int[2];  startIdAndCount[0] = pageNo * pageSize;  startIdAndCount[1] = pageSize;  return studentDao.selectStudentsByPage(startIdAndCount); }

三、截取List查询结果分页

对于这个方法会显得比较的简单我们直接来看代码:

  @Override  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {  // 分页数据  int[] startIdAndCount = new int[2];  startIdAndCount[0] = pageNo * pageSize;  startIdAndCount[1] = pageSize;  return studentDao.selectStudentsByPage(startIdAndCount); }

四、mybatis框架pageHelper插件分页

首先我们来看 Spring整合部分:

导入pom.xml 代码如下所示:

  @Override  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {  // 分页数据  int[] startIdAndCount = new int[2];  startIdAndCount[0] = pageNo * pageSize;  startIdAndCount[1] = pageSize;  return studentDao.selectStudentsByPage(startIdAndCount); }

我们通过配置项目的配置文件代码如下所示:

                                                            classpath*:com/yyz/mapper/*Mapper.xml                                                                                                                                                                                    helperDialect=mysql                                                reasonable=true                                                params=count=countSql                                                supportMethodsArguments=true                                                autoRuntimeDialect=true                                                                                                 

SpringBoot整合:

  @Override  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {  // 分页数据  int[] startIdAndCount = new int[2];  startIdAndCount[0] = pageNo * pageSize;  startIdAndCount[1] = pageSize;  return studentDao.selectStudentsByPage(startIdAndCount); }

配置项目 application.xml 文件,代码如下所示:

  @Override  public List getStudents(Integer  pageNo,Integer  pageSize) throws Exception {  // 分页数据  int[] startIdAndCount = new int[2];  startIdAndCount[0] = pageNo * pageSize;  startIdAndCount[1] = pageSize;  return studentDao.selectStudentsByPage(startIdAndCount); }

对于在分页插件中为我们也提供了下面这些参数:

  • dialect:默认情况下会使用 PageHelper 方式进行分页,如果想要实现自己的分页逻辑,可以实现 。

  • Dialect(com.github.pagehelper.Dialect) 接口,然后配置该属性为实现类的全限定名称。 使用自定义 dialect 实现时,下面的参数没有任何作用。

  • helperDialect:分页插件会自动检测当前的数据库链接,自动选择合适的分页方式oracle,mysql,mariadb,sqlite,hsqldb,postgresql,db2,sqlserver,informix,h3,sqlserver2012,derby特别注意:使用 SqlServer2012 数据库时,需要手动指定为 sqlserver2012,否则会使用 SqlServer2005 的方式进行分页。 offsetAsPageNum:默认值为 false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为 true 时,会将 RowBounds 中的 offset 参数当成 pageNum 使用,可以用页码和页面大小两个参数进行分页。

  • rowBoundsWithCount:默认值为false,该参数对使用 RowBounds 作为分页参数时有效。 当该参数设置为true时,使用 RowBounds 分页会进行 count 查询。

  • pageSizeZero:默认值为 false,当该参数设置为 true 时,如果 pageSize=0 或者 RowBounds.limit = 0 就会查询出全部的结果(相当于没有执行分页查询,但是返回结果仍然是 Page 类型)。

  • reasonable:分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页,pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询。

  • params:为了支持startPage(Object params)方法,增加了该参数来配置参数映射,用于从对象中根据属性名取值, 可以配置 pageNum,pageSize,count,pageSizeZero,reasonable,不配置映射的用默认值, 默认值为pageNum=pageNum;pageSize=pageSize;count=countSql;reasonable=reasonable;pageSizeZero=pageSizeZero

  • supportMethodsArguments:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。

  • aggregateFunctions:默认为所有常见数据库的聚合函数,允许手动添加聚合函数(影响行数),所有以聚合函数开头的函数,在进行 count 转换时,会套一层。其他函数和列会被替换为 count(0),其中count列可以自己配置。

当然在这些方法参数中,当 offsetAsPageNum=false 的时候,由于代码中 PageNum 的问题 RowBound 在查询的时候 reasonable 会强制为 false ,但是使用PageHelper.startPage 方法不受影响。我们来看下相关内容的 service层的代码:

 @Overridepublic ResponseResult selectAllStudent(Integer pageNum, Integer pageSize) {    Map map = new HashMap<>();    PageHelper.startPage(pageNum,pageSize);    List  students = studentMapper.selectAllStudents();    PageInfo pageInfo = new PageInfo(students);    long total = pageInfo.getTotal();    map.put("result",pageInfo);    map.put("count",total);    return ResponseResultUtil.success(map);}

五、springData分页

对于在service层的代码如下所示:

Sort.Order travelDate = new Sort.Order(Sort.Direction.DESC, "travelDate");Sort.Order createdTime = new Sort.Order(Sort.Direction.DESC, "createdTime");Sort sort = new Sort(travelDate, createdTime);Pageable pageable = new PageRequest(page, pageSize, sort);List items = null;try {    items = travelRepository.getTravelItemsByTravelDateBetweenAndUserId(theStartDate, theEndDate, openId, pageable);} catch (Exception e) {    throw new DatabaseRelatedException("TravelRepository异常");}

这就是有关于在service层的代码,那么对于dao层的话,接口继承的是PagingAndSortingRepository接口,所以我们注意要加@Repository注解。

读到这里,这篇"Java中如何实现分页功能"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

参数 代码 数据 查询 配置 方法 函数 接口 插件 功能 内容 数据库 文章 方式 结果 合适 关键 关键字 属性 总数 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 成都孝成浩网络技术有限公司 云岭职工 服务器报错 2021谷歌地球无法连接服务器 下列属于数据库的物理独立性 数据库表有哪些模式 把电脑通过ipv4做成服务器 关系数据库系统是 lol语音服务器连不上怎么办 做软件开发的外包 友谊软件开发商在线咨询 北京智慧互联应用软件开发中心 新青年眼中的网络安全 古龙小说软件开发 揭阳数字软件开发市价 邮政储蓄 软件开发中心 网络时钟校时服务器客户端 企业如何加强网络安全工作 重庆市高中生网络安全 饥荒服务器模组无法启用 永兴学电脑软件开发多少钱一个月 主机屋云服务器 怎样查看网络安全日志 设计一个学生的数据库 稳定app软件开发定制 金华比希网络技术有限公司 上海闪态网络技术有限公司是什么 怎么知道自己的网络安全 网络安全的对付邪教的手抄报 河北潮流软件开发服务有哪些 审计局网络安全规划和策略
0