首页 > 作文

Java项目开发中实现分页的三种方式总结

更新时间:2023-04-04 22:06:04 阅读: 评论:0

目录
前言使用1、springdatajpa分页2、mybatis分页3、hutools工具类分页总结

前言

java项目开发中经常要用到分页功能,现在普遍使用springbbreadoot进行快速开发,而数据层主要整合springdatajpa和mybatis两种框架,这两种框架都提供了相应的分页工具,使用方式也很简单,可本人在工作中除此以外还用到第三种更方便灵活的分页方式,在这里一同分享给大家。

使用

主要分为springdatajpa分页、mybatis分页、hutools工具类分页几个部分

1、springdatajpa分页

1)、引入依赖

<dependency>  <groupid>org.springframework.boot</groupid>  <artifactid>spring-boot-starter-data-jpa</artifactid></dependency>

2)、rvice中编写分页服务

springdatajpa分页就是定义pageable对象来处理分页,其中pagerequest来定义分页参数,page对象来接手查询结果进行分页包装,包装后的结果pageresult可以得到总记录数、总页数、分页列表等数据结果。

/** * 根据doctorid查询全部关注列表【分页】 * * @param doctorid 医生id * @return 结果集 */public map<string, object> findalllistbydoctorid(long doctorid, integer pageindex, integer pagesize) {    pageable pageable = pagerequest.of(pageindex - 1, pagesize); // 分页    page<follow> pageresult = followrepository.findbydoctoridorderbycreatedatdesc(doctorid, pageable);    list<followdto> dtolist = followmapper.todto(pageresult.getcontent());    if (!collectionutils.impty(dtolist)) {        // 处理业务逻辑....    }    // 封装分页结果    map<string, object> map = new hashmap<>();    map.put("pageindex", pageindex.tostring()); // 当前页    map.put("pagesize", pagesize.tostring()); // 每页条数    map.put("total", long.tostring(pageresult.gettotalelements())); // 总记录数    map.put("pages", integer.tostring(pageresult.gettotalpages())); // 总页数    map.put("list", dtolist); // 数据列表    return map;}

3)、repository中处理分页

这里就是继承jparepository对象,然后传入rvice中定义好的pageable对象,并且返回page包装的结果即可。

import com.patient.domain.follow;import org.springframework.data.domain.page;import org.springframework.data.domain.pageable;import org.springframework.data.jpa.repository.jparepository; @repositorypublic interface followrepository extends jparepository<follow, long> {     page<follow> findbydoctoridorderbycreatedatdesc(l天使之城影评ong doctorid, pageable pageable);}

2、mybatis分页

1)、引入pagehelper依赖

<dependency>    <groupid>com.github.pagehelper</groupid>    <artifactid>pagehelper-spring-boot-starter</artifactid></dependency>

2)、使用pagehelper实现分页

/** * 查询推广人员列表,分页。 * @return 封装的分页结果对象 */public pageresult findpromotepersonlist(string hospitalcode,promotepersonreq promotepersonreq) {    integer pageindex = promotepersonreq.getpageindex();    integer pagesize = promotepersonreq.getpagesize();    pagehelper.startpage(pageindex, pagesize); // 每页的大小为pagesize,查询第page页的结果    list<promoteperson> list = promotepersonmapper.lectall();    pageinfo<promoteperson> pageinfo = new pageinfo<>(list);    pagehelper.clearpage();    // 返回分页结果    pageresult pageresult = new pageresult();    pageresult.tpageindex(pageindex);    pageresult.tpagesize(pagesize);    pageresult.tpages(pageinfo.getpages());    pageresult.ttotal((int) pageinfo.gettotal());    pageresult.tlist(list);    return pageresult;}

3、hutools工具类分页

1)、引入依赖

这里是可以单独引入hutools部分工具类的,具体参考官网文档,我平时写项目一定会使用这个工具,所以直接引入了所有。

<dependency>    <groupid>cn.hutool</groupid>    <artifactid>hutool-all</artifactid>    <version>5.1.2</version></dependency>

2)、分页实现

一般就用到两个工具类,一是pageutil.totalpage(总记录数, 每页记录数)来计算总页数,二是collutil.page(索引, 每页记录数, 数工作态度怎么写据列表)来返回指定分页结果,注意这里的索引是从1开始的,和springdatajpa分页索引从0开始有区别。

/** * 我的订单-待支付[分页] * * @param openid 用户唯一标识 * @return 结果集 */public map<string, object> findmyordernotpay(string openid, integer pageindex, integer pagesize) {    map<string, object> map = new hashmap<>();    // 查询    list<consultorder> orderlist = consultorderrepository.findmyordernotpay(openid);    if (collectionutils.impty(orderlist)) {       工厂保安管理制度     map.put("pageindex", pageindex.tostring()); // 当前页            map.put("pagesize", pagesize.tostring()); // 每页条数            map.put("total", "0"); // 总记录数            map.put("pages", "0"); // 总页数            map.put("list", new arraylist<>()); // 数据列表            return map;    }    list<ordervo> pagelist = new arraylist<>();    int totalsize = 0;    int totalpage = 0;    // 计算总页数    totalsize = orderlist.size();        totalpage = pageutil.totalpage(totalsize, pagesize);    // 分页,索引小于等于总页数,才返回列表.    if (pageindex <= totalpage) {            // 分页            pagelist = collutil.page(pageindex, pagesize, ordervolist);    }    // 返回结果    map.put("pageindex", integer.tostring(pageindex)); // 当前页    map.put("pagesize", integer.tostring(pagesize)); // 每页条数    map.put("total", integer.tostring(totalsize)); // 总记录数    map.put("pages", integer.tostring(totalpage)); // 总页数    map.put("list", pagelist); // 数据列表    return map;}

总结

1)、注意 :为了方便演示代码中直接用了map对象来包装返回分页结果,在实际项目中,切记一定要自己定义实体对象作为返回结果,因为map对象返回的结果如果是动态且数据量较大的列表,是存在造九大音乐学院成内存泄露风险的,举个例子,比如返回10条问诊的分页记录时,其中聊天内容这个属性包含大量聊天数据,因为你无法确定对话的两个人到底聊了多少,可它确实作为一个属性包含在分页记录中;

2)、springdatajpa分页,就是使用自带的pageable对象来处理,需要注意的是分页索引从0开始,传错了会造成分页结果错乱或重复的现象;

3)、mybatis分页,就是借助pagehelper工具来实现,pagehelper.startpage和pagehelper.clearpage中间是需要分页的业务查询代码,可以通过pageinfo对象包装,获取其中需要的分页参数返回给前端展示;

4)、hutools分页,就是引入hutools工具类,使用其中的pageutil和collutil工具类来实现,这种方式我个人比较喜欢,因为在较复杂的查询业务中,前两种实现起来很费劲还容易写错,不仅可能牵扯到多个类及方法,写完后过段时间也不容易阅读。而hutools分页就类似于很早以前的分页方式,我把它理解为绿色简易版jsp分页,只需在服务层使用一个工具类分页即可,既灵活又便于阅读,简直是分页的神器。

到此这篇关于java项目开发中实现分页的三种方式的文章就介绍到这了,更多相关java实现分页的三种方式内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 22:06:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/7f84c896033e568dc6eb112b92b33975.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:Java项目开发中实现分页的三种方式总结.doc

本文 PDF 下载地址:Java项目开发中实现分页的三种方式总结.pdf

标签:分页   工具   对象   每页
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图