码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Mybatis如何使用分页插件pageHelper


    目录

    1. 导入依赖:

    2. mybatis-config.xml文件配置plugins标签

    3. 如何在代码中使用

    1) PageHelper.startPage 静态方法调用

    2) PageHelper.startPage 静态方法返回值获取参数

    3) lambda用法

    3.1 返回Page

    3.2 返回PageInfo(pageInfo包含了更加全面的分页属性)

    3.3 pageInfo属性含义



    1. 导入依赖:

    1. <dependency>
    2. <groupId>com.github.pagehelpergroupId>
    3. <artifactId>pagehelperartifactId>
    4. <version>4.2.0version>
    5. dependency>

     2. mybatis-config.xml文件配置plugins标签

    1. <plugins>
    2. <plugin interceptor="com.github.pagehelper.PageInterceptor">
    3. <property name="reasonable" value="true"/>
    4. plugin>
    5. plugins>

    3. 如何在代码中使用

    1). PageHelper.startPage 静态方法调用

          
             在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可
            紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
     

    1. import com.github.pagehelper.PageHelper;
    2. import com.lyx.mybatis.dao.UserMapper;
    3. import com.lyx.mybatis.entity.User;
    4. import org.apache.ibatis.io.Resources;
    5. import org.apache.ibatis.session.SqlSession;
    6. import org.apache.ibatis.session.SqlSessionFactory;
    7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    8. import java.io.IOException;
    9. import java.io.Reader;
    10. import java.util.List;
    11. public class Test {
    12. public static void main(String[] args) throws IOException {
    13. Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
    14. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    15. //这个session相当于connection
    16. SqlSession sqlSession = sqlSessionFactory.openSession();
    17. UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    18. PageHelper.startPage(1,5);
    19. List<User> userList = mapper.queryAllUsers();
    20. for(User u :userList){
    21. System.out.println(u.toString());
    22. }
    23. sqlSession.close();
    24. }
    25. }

     

     运行报错:

    1. Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'com.github.pagehelper.PageInterceptor'.
    2. Cause: java.lang.ClassNotFoundException: Cannot find class: com.github.pagehelper.PageInterceptor

    报错如下:

    解决办法:

    在5.x版本,mybatis-config.xml中配置pageHelper的格式为:

    1. <plugins>
    2. <plugin interceptor="com.github.pagehelper.PageInterceptor">
    3. <property name="reasonable " value="true"/>
    4. plugin>
    5. plugins>

    而在4.x版本中,mybatis-config.xml中的配置为:

    1. <plugins>
    2. <plugin interceptor="com.github.pagehelper.PageHelper">
    3. <property name="reasonable " value="true"/>
    4. plugin>
    5. plugins>

    所以重新导入5.x版本的依赖:

    运行成功:


    2) PageHelper.startPage 静态方法返回值获取参数

    1. import com.github.pagehelper.Page;
    2. import com.github.pagehelper.PageHelper;
    3. import com.lyx.mybatis.dao.StudentMapper;
    4. import com.lyx.mybatis.entity.Student;
    5. import org.apache.ibatis.io.Resources;
    6. import org.apache.ibatis.session.SqlSession;
    7. import org.apache.ibatis.session.SqlSessionFactory;
    8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    9. import java.io.IOException;
    10. import java.io.Reader;
    11. import java.util.HashMap;
    12. import java.util.Iterator;
    13. public class StudentTest {
    14. public static void main(String[] args) throws IOException {
    15. Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
    16. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
    17. SqlSession sqlSession = sqlSessionFactory.openSession();
    18. StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
    19. /*
    20. *在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可
    21. *紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
    22. */
    23. Page page = PageHelper.startPage(1, 5);
    24. HashMap studentHashMap = mapper.queryStudents();
    25. Iterator iterator = studentHashMap.keySet().iterator();
    26. while (iterator.hasNext()) {
    27. Integer next = iterator.next();
    28. System.out.println(studentHashMap.get(next));
    29. }
    30. System.out.println("当前页:"+page.getPageNum());
    31. System.out.println("总数据量:"+page.getTotal());
    32. System.out.println("总页码:"+page.getPages());
    33. System.out.println("页面大小:"+page.getPageSize());
    34. sqlSession.commit();
    35. sqlSession.close();
    36. }
    37. }
    38. 运行结果:

      当前是第一页,总数据量为1026条,pageSize页面大小为5,所以总页码数为206 

      3) lambda用法

      3.1 返回Page

      Page<Country> page = PageHelper.startPage(1, 10).doSelectPage(

                      ()-> countryMapper.selectGroupBy()

      );

      1. import com.github.pagehelper.Page;
      2. import com.github.pagehelper.PageHelper;
      3. import com.lyx.mybatis.dao.StudentMapper;
      4. import com.lyx.mybatis.entity.Student;
      5. import org.apache.ibatis.io.Resources;
      6. import org.apache.ibatis.session.SqlSession;
      7. import org.apache.ibatis.session.SqlSessionFactory;
      8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
      9. import java.io.IOException;
      10. import java.io.Reader;
      11. import java.util.List;
      12. public class StudentTest {
      13. public static void main(String[] args) throws IOException {
      14. Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
      15. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
      16. SqlSession sqlSession = sqlSessionFactory.openSession();
      17. StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
      18. /*
      19. *在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage 静态方法即可
      20. *紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
      21. */
      22. // Page page = PageHelper.startPage(1, 5);
      23. // List students = studentMapper.queryAllStudents();
      24. // for (Student student : students) {
      25. // System.out.println(student);
      26. // }
      27. Page page = PageHelper.startPage(1, 10).doSelectPage(
      28. () -> studentMapper.queryAllStudents()
      29. );
      30. List result = page.getResult();
      31. for (Student student : result) {
      32. System.out.println(student);
      33. }
      34. System.out.println("当前页:" + page.getPageNum());
      35. System.out.println("总数据量:" + page.getTotal());
      36. System.out.println("总页码:" + page.getPages());
      37. System.out.println("页面大小:" + page.getPageSize());
      38. sqlSession.commit();
      39. sqlSession.close();
      40. }
      41. }
      42. 3.2 返回PageInfo(pageInfo包含了更加全面的分页属性)

        1. //也可以直接返回PageInfo,注意doSelectPageInfo方法和doSelectPage
        2. pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(new ISelect() {
        3. @Override
        4. public void doSelect() {
        5. countryMapper.selectGroupBy();
        6. }
        7. });
        8. //对应的lambda用法
        9. pageInfo = PageHelper.startPage(1, 10).doSelectPageInfo(
        10. () -> countryMapper.selectGroupBy()
        11. );

        注意doSelectPageInfo方法和doSelectPage

         lambda写法:

        1. import com.github.pagehelper.ISelect;
        2. import com.github.pagehelper.Page;
        3. import com.github.pagehelper.PageHelper;
        4. import com.github.pagehelper.PageInfo;
        5. import com.lyx.mybatis.dao.StudentMapper;
        6. import com.lyx.mybatis.entity.Student;
        7. import org.apache.ibatis.io.Resources;
        8. import org.apache.ibatis.session.SqlSession;
        9. import org.apache.ibatis.session.SqlSessionFactory;
        10. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
        11. import java.io.IOException;
        12. import java.io.Reader;
        13. import java.util.List;
        14. public class StudentTest {
        15. public static void main(String[] args) throws IOException {
        16. Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        17. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        18. SqlSession sqlSession = sqlSessionFactory.openSession();
        19. StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
        20. // PageInfo pageInfo = PageHelper.startPage(1,10).doSelectPageInfo(
        21. // new ISelect() {
        22. // @Override
        23. // public void doSelect() {
        24. // studentMapper.queryAllStudents();
        25. // }
        26. // }
        27. // );
        28. PageInfo pageInfo = PageHelper.startPage(1,10).doSelectPageInfo(
        29. ()->studentMapper.queryAllStudents()
        30. );
        31. //注意page是getResult()
        32. List list = pageInfo.getList();
        33. for (Student student : list) {
        34. System.out.println(student);
        35. }
        36. System.out.println("当前页:" + pageInfo.getPageNum());
        37. System.out.println("总数据量:" + pageInfo.getTotal());
        38. System.out.println("总页码:" + pageInfo.getPages());
        39. System.out.println("页面大小:" + pageInfo.getPageSize());
        40. //第一页的编码
        41. System.out.println(pageInfo.getNavigateFirstPage());
        42. //最后一页的编码
        43. System.out.println(pageInfo.getNavigateLastPage());
        44. sqlSession.commit();
        45. sqlSession.close();
        46. }
        47. }

         

        3.3 pageInfo属性含义

        pageInfo类可用于分页操作。以下为属性含义: 

      43. 相关阅读:
        二叉树详解
        “CarrotMovement“ app Tech Support(URL)
        ​南阳师范学院图书馆藏《​乡村振兴战略下传统村落文化旅游设计》许少辉八一新著——2023学生开学季辉少许
        初识C++(二)
        需求分析和常见的需求问题解决
        Linux 安全 - Capabilities机制
        【ACWing】1401. 围住奶牛
        java计算机毕业设计恒美服饰原材料采购预约配送系统MyBatis+系统+LW文档+源码+调试部署
        15 检验的优良性
        【gcc】RtpTransportControllerSend学习笔记 4:码率分配
      44. 原文地址:https://blog.csdn.net/m0_47010003/article/details/127376325
        • 最新文章
        • 攻防演习之三天拿下官网站群
          数据安全治理学习——前期安全规划和安全管理体系建设
          企业安全 | 企业内一次钓鱼演练准备过程
          内网渗透测试 | Kerberos协议及其部分攻击手法
          0day的产生 | 不懂代码的"代码审计"
          安装scrcpy-client模块av模块异常,环境问题解决方案
          leetcode hot100【LeetCode 279. 完全平方数】java实现
          OpenWrt下安装Mosquitto
          AnatoMask论文汇总
          【AI日记】24.11.01 LangChain、openai api和github copilot
        • 热门文章
        • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
          奉劝各位学弟学妹们,该打造你的技术影响力了!
          五年了,我在 CSDN 的两个一百万。
          Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
          面试官都震惊,你这网络基础可以啊!
          你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
          心情不好的时候,用 Python 画棵樱花树送给自己吧
          通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
          13 万字 C 语言从入门到精通保姆级教程2021 年版
          10行代码集2000张美女图,Python爬虫120例,再上征途
        Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
        正则表达式工具 cron表达式工具 密码生成工具

        京公网安备 11010502049817号