一.未继承springBoot
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> </dependency>
:需要手动在MyBatis-config.xml文件中配置该插件
<!--配置分页插件--> <plugins> <plugin interceptor="com.github.pagehelper.PageInterceptor"> <property name="helperDialect" value="mysql" /> <property name="offsetAsPageNum" value="true" /> <property name="rowBoundsWithCount" value="true" /> <property name="reasonable" value="true" /> </plugin> </plugins>
这段配置的解析如下:
a. helperDialect: mysql
:设置 MyBatis 使用的分页插件的数据库方言为 MySQL。这样 MyBatis 在生成分页查询语句时会使用 MySQL 的语法。
b. offsetAsPageNum: true
:将分页查询中的偏移量(offset)视为页码。当设置为 true
时,在使用分页插件进行分页查询时,offset
参数将被当作页码来使用。
c. rowBoundsWithCount: true
:设置分页插件在进行分页查询时是否同时查询总记录数。当设置为 true
时,分页插件会在进行分页查询时额外执行一次查询,用于查询总记录数。
d. reasonable: true
:用于在分页查询中进行合理化处理。当设置为 true
时,在查询的页码超出总页数时,会自动调整为最后一页或第一页,避免出现超出范围的页码。
至此,就算在Spring或者SpringBoot项目中手动集成了该分页插件,注意一定要确保在项目中能够扫描也就是加载到MyBatis-config.xml这个配置文件.
二.使用集成了SpringBoot的分页插件
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency>
这个插件集成了springBoot 不需要手动在Mybatis-config.xml文件中手动配置开启这个插件,直接使用即可,如果需要设置上述 a b c d 四个参数也可以在Mybatis-config.xml中再配置,或者在application.yaml中配置,在application.properties中配置,注意格式不同就行,还有就是配置上述四个参数,算是分页插件的参数也可以算是MyBatis的参数,也可以在Mybatis-config.xml 配置MyBatis属性时,配置,看到时,别觉得奇怪就行,如下:
<properties>
<!-- 其他 MyBatis 配置属性 -->
<property name="helperDialect" value="mysql" />
<property name="offsetAsPageNum" value="true" />
<property name="rowBoundsWithCount" value="true" />
<property name="reasonable" value="true" />
</properties>
三.具体使用方法和注意事项
//创建结果集 HashMap<String, Object> mapResult = new HashMap<>(); //开启分页 PageHelper.startPage(page, size); //遍历所有库存信息 List<Goods> list = goodsDao.listInventory(codeOrName,goodsTypeId); Page<Goods> listPage = (Page<Goods>)list; mapResult.put("total",listPage.getTotal() ); //mapResult.put("total",list.size()); //todo:这样写会导致SQL不会全部查询,只会按照分页的大小查询30条记录,不知道为什么,并且开启分页那条代码必须在遍历所有库存信息的上面,否则就会出现 //todo: 类转换异常 显示List类型不能转为Page //List<Goods> result = listPage.getResult(); mapResult.put("rows",listPage.getResult()); return mapResult;
使用 PageHelper 插件后,你可以在 Mapper XML 文件或接口的方法上使用方法名为 PageHelper.startPage(int pageNum, int pageSize)
的静态方法来开启分页功能。分页插件会自动拦截后续的查询语句,并根据传入的页码和每页大小进行分页查询。这也是为什么会导致,查询记录异常的原因,是因为插件自动给你拦截了查询语句,并更改了你的查询的SQL语句的条件,即使你没有看到Mapper.xml中的SQL语句发生了变化,它默认给你改了!