mybatis分页插件的使用

mybatis分页插件的使用

插件 是 Mybatis 中的最重要的功能之一,能够对特定组件的特定方法进行增强。
PageHelper是国内非常优秀的一款开源的mybatis分页插件,它支持基本主流与常用的数据库,一致支持mysql、oracle、mariaDB、DB2、SQLite、Hsqldb等。

推荐使用maven

  1. 在 pom.xml 中添加如下依赖
<!--        分页插件依赖的包2个
因为,涉及到原始SQL的分析与解析,所以需要引入jsqlparser这个SQL解析器组件
-->
        <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser -->
        <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>3.1</version>
        </dependency>
  1. 然后,在mybatis-config.xml中增加plugin配置
<!--    分页插件-->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
        <property name="helperDialect" value="mysql"/><!-- 这一行我没写,按道理是应该有的-->
    </plugins>
  1. 在Mapper XML中添加一个SQL标签

注意:一个容易出错的点(对于分页来说,SQL语句最后的分号不能加)
自我感觉是PageHelper的jsqlparser在组织SQL语句,添加limit后,这个分号造成了的SQL语法错误。


    <select id="selectAllGoodsAndType" resultType="com.liujiawei.bean.Goods">
       select *
        from goods
    </select>
  1. 然后,在代码中实际调用
    通过pagehelper的核心类pageInfo取数据
 @Test
    public void selectAllGoodsAndType(){
        //开启分页
        //查询第2页数据,每页为8条数据,实际中应该使用变量代替。
        PageHelper.startPage(2,8);
        List<Goods> list = goodsDao.selectAllGoodsAndType();


        PageInfo pageInfo = new PageInfo(list,3);//分页导航
        System.out.println("当前页" + pageInfo.getPageNum());
        System.out.println("每页的数量" + pageInfo.getPageSize());
        System.out.println("当前页的数量" + pageInfo.getSize());
        System.out.println("总记录数" + pageInfo.getTotal());
        System.out.println("总页数" + pageInfo.getPages());
        System.out.println("结果集" + pageInfo.getList().toString());
        System.out.println("是否为第一页" + pageInfo.isIsFirstPage());
        System.out.println("前一页" + pageInfo.getPrePage());
        System.out.println("下一页" + pageInfo.getNextPage());
        System.out.println("导航页码数" + pageInfo.getNavigatePages());
        System.out.println("所有导航页号" + pageInfo.getNavigatepageNums().toString());
        System.out.println("导航第一页" + pageInfo.getNavigateFirstPage());
        System.out.println("导航最后一页" + pageInfo.getNavigateLastPage());
        for (Goods goods:list) {
            System.out.println(goods.getGoodId()+"\t"+goods.getGoodName()+"\t"+goods.getTypeId());
        }
    }

注意:
PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值