分页插件PageHelper的使用方法

一.未继承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语句发生了变化,它默认给你改了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值