• 【Mybatis】使用PageHelper进行分页查询


            使用mybatis时,最容易遇到的需求就是分页查询了。借助pagehelper分页插件可以快速的实现分页功能。而且这个插件的优点是分页与mapper.xml完全解耦,有效的避免了直接写分页sql来实现分页功能。

    一、分页插件原理

            分页插件的基本原理是使用mybatis提供的 插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,添加对应的分页语句及分页参数。

             举例:SELECT * FROM diagnosis,拦截sql后重写为:select t.* from (SELECT * FROM diagnosis) t LIMIT 0,10

    二、mapper.xml文件配置:

    1. <select id="findByCountryProjectName" resultType="cn.hsa.pss.pw.web.jsyb.local.entity.DiagnosisDO">
    2. select * from diagnosis
    3. <where>
    4. <if test="countryProjectName != null and countryProjectName != ''">
    5. country_project_name like "%"#{countryProjectName}"%"
    6. if>
    7. where>
    8. select>

    说明如下:

            1、使用pagehelper进行分页查询时,,无需写分页语句,对于其他的查询条件可正常编写。

            2、模糊查询指令:like "%"#{查询条件}"%"

    三、 在代码中使用

    1. //dao代码片段
    2. List findByCountryProjectName(@Param("countryProjectName") String countryProjectName);

    说明如下:

            1、dao层代码入参中只需写查询条件,无需写分页入参 。

    1. public PageInfo findByCountryProjectName(String countryProjectName, int pageNum, int pageSize) {
    2. PageHelper.startPage(pageNum, pageSize);
    3. List list = diagnosisDAO.findByCountryProjectName(countryProjectName);
    4. Long total = 0L;
    5. if (!list.isEmpty()) {
    6. //查询总数
    7. total = diagnosisDAO.findDiagnosisCount(countryProjectName);
    8. }
    9. PageInfo pageInfo = new PageInfo<>();
    10. pageInfo.setList(list);
    11. pageInfo.setPageNum(pageNum);
    12. pageInfo.setPageSize(pageSize);
    13. pageInfo.setTotal(total);
    14. return pageInfo;
    15. }

    使用PageInfo对象包装查询结果,无需在查询总数,代码优化如下: 

    1. public PageInfo findByCountryProjectName(String countryProjectName, int pageNum, int pageSize) {
    2. PageHelper.startPage(pageNum, pageSize);
    3. List list = diagnosisDAO.findByCountryProjectName(countryProjectName);
    4. PageInfo pageInfo = new PageInfo(list);
    5. return pageInfo;
    6. }

     说明如下:

            1、PageHelper.startPage(pageNum, pageSize); 引入分页查询,pageNum:页码,pageSize:每页显示数量。

            2、一定要在查询之前引入,它会自动对该代码下的第一个查询进行分页,即:        findByCountryProjectName。

            3、查询结果使用PageInfo包装,无需再查询总数,减少与数据库交互,返回的对象信息如下,total为总数:

    1. {
    2. "total": 0,
    3. "list": [],
    4. "pageNum": 1,
    5. "pageSize": 7,
    6. "size": 0,
    7. "startRow": 0,
    8. "endRow": 0,
    9. "pages": 0,
    10. "prePage": 0,
    11. "nextPage": 0,
    12. "isFirstPage": true,
    13. "isLastPage": true,
    14. "hasPreviousPage": false,
    15. "hasNextPage": false,
    16. "navigatePages": 8,
    17. "navigatepageNums": [],
    18. "navigateFirstPage": 0,
    19. "navigateLastPage": 0
    20. }

  • 相关阅读:
    抑制肯定响应消息指示位(SPRMIB)
    C Primer Plus(6) 中文版 第12章 存储类别、链接和内存管理 12.3 掷骰子
    【Redis】Redis常用命令一
    SSL证书系列--又拍云Let’s Encrypt免费DV SSL证书使用教程
    最全常用高数公式
    【爬虫逆向】Python逆向采集猫眼电影票房数据
    C++11 lambda表达式 已完成未发布
    service 详解
    Python编程指南:利用HTTP和HTTPS适配器实现智能路由
    JL-A/41 JL-A/42 JL-A/43 集成电路电流继电器 过负荷或短路 JOSEF约瑟
  • 原文地址:https://blog.csdn.net/Flying_Ape/article/details/128098911