本文最后更新于:January 24, 2022 pm
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
目录 MyBatis 中文文档:https://mybatis.org/mybatis-3/zh/index.html
导入依赖 <dependency > <groupId > com.github.pagehelper</groupId > <artifactId > pagehelper</artifactId > <version > 5.3.0</version > </dependency >
加入plugin配置 根据主配置文件中的顺序规格,需要将plugins
放在environments
之前。
方式一 此方法是5.0以上版本分页插件的xml配置文件。
<plugins > <plugin interceptor ="com.github.pagehelper.PageInterceptor" > </plugin > </plugins >
方式二 5.0以下版本分页插件的xml配置文件,还需要指定数据库名称。
还需要先再加一个依赖:
<dependency > <groupId > com.github.jsqlparser</groupId > <artifactId > jsqlparser</artifactId > <version > 4.3</version > </dependency >
再配置:
<plugins > <plugin interceptor ="com.github.pagehelper.PageHelper" > <property name ="dialect" value ="mysql" /> </plugin > </plugins >
PageHelper对象 在查询语句(调用方法)之前调用PageHelper.startPage
静态方法。
除了PageHelper.startPage
方法外,还提供了类似用法的PageHelper.offsetPage
方法。在需要进行分页的Mybatis查询方法前调用PageHelper.startPage
即可,相邻的第一个mybatis查询方法会被进行分页。
基本用法 @Test public void testo6 () { PageHelper.startPage(1 ,3 ); List<Person> man = PersonDao.selectAll(); }
示例 数据库中的数据 1001, loong 1002, loong2 1003, loong3 1004, loong4 1005, loong5 1006, loong6 1007, loong7 1008, loong8 1009, loong9 1010, loong10 1011, loong11 1012, loong12
接口中的方法
mapper文件 <select id ="queryAll" resultType ="com.tothefor.Study1.entity.Person" > <include refid ="allS" > </include > </select > <sql id ="allS" > select * from Person</sql >
第一页查询 PersonDao dao = sqlSession.getMapper(com.tothefor.Study1.dao.PersonDao.class); PageHelper.startPage(1 ,3 ); List<Person> allP = dao.queryAll(); allP.forEach(it-> System.out.println(it));
结果 ==> Preparing: SELECT count (0 ) FROM Person ==> Parameters: <== Columns: count(0 ) <== Row: 12 <== Total: 1 ==> Preparing: select * from Person LIMIT ? ==> Parameters: 3 (Integer) <== Columns: id, name <== Row: 1001 , loong <== Row: 1002 , loong2 <== Row: 1003 , loong3 <== Total: 3 Person{id=1001 , name='loong' } Person{id=1002 , name='loong2' } Person{id=1003 , name='loong3' }
第二页查询 PersonDao dao = sqlSession.getMapper(com.tothefor.Study1.dao.PersonDao.class); PageHelper.startPage(2 ,3 ); List<Person> allP = dao.queryAll(); allP.forEach(it-> System.out.println(it));
结果 ==> Preparing: SELECT count (0 ) FROM Person ==> Parameters: <== Columns: count(0 ) <== Row: 12 <== Total: 1 ==> Preparing: select * from Person LIMIT ?, ? ==> Parameters: 3 (Long), 3 (Integer) <== Columns: id, name <== Row: 1004 , loong4 <== Row: 1005 , loong5 <== Row: 1006 , loong6 <== Total: 3 Person{id=1004 , name='loong4' } Person{id=1005 , name='loong5' } Person{id=1006 , name='loong6' }
其他同理实现。如果最后一页没有足够的数据,则会输出查询到的数据。
报错问题 org.apache.ibatis.exceptions.PersistenceException:
这是因为你使用的是5.0以上版本
的分页插件,但你的plugin配置
是5.0版本以下
的配置方式(本文的方式二)。你只需要改为方式一即可。