美文网首页- [ MyBatis ]
十, Mybatis之PageHelper分页插件

十, Mybatis之PageHelper分页插件

作者: 好多可乐 | 来源:发表于2021-01-11 16:32 被阅读0次

    一,PageHelper原理:

    在执行原有要sql的基础上进行分析,自动生成分页以及select count(*)这样的语句,因为涉及对原始sql的分析和解析,所以交给了jsqlparser这个sql解释器组件,所有必须要对其进行引用,具体的sql执行过程在执行后即可查看。

    二,PageHelper使用流程

    1. maven引入PageHelop和jsqlparser

      注意:pagehelper5.1.10后,因为采用了新的api,jsqlparser版本必须是2.0及以上的才可以适配

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>5.1.10</version>
    </dependency>
    
    <dependency>
        <groupId>com.github.jsqlparser</groupId>
        <artifactId>jsqlparser</artifactId>
        <version>2.0</version>
    </dependency>
    
    1. mybatis-config.xml增加Plugins配置
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--指定对应的数据库,这个可以不写,插件会自动识别,但是严谨角度建议还是写一下-->
            <property name="helperDialect" value="mysql"/>
            <!--开启分页合理化(如输入第0页时,展示第一页数据,输入超过最大页数的数据时候,展示最大页数的数据)-->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>
    

    goods.xml文件配置

    <select id="selectPage" resultType="com.imooc.mybatis.entity.Goods">
     select * from t_goods where current_price &lt;1000
    </select>
    

    注意:这里我踩坑了,sql语句尾巴习惯性的加了个分号,运行时候就报错了,查了半天,大家引以为戒

    your MySQL server version for the right syntax to use near 'LIMIT 10, 10' at line 1
    The error may exist in mappers/goods.xml
    The error may involve defaultParameterMap
    The error occurred while setting parameters
    SQL: select * from t_goods where current_price <1000; LIMIT ?, ?
    Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 10, 10' at line 1

    1. 代码中使用PageHelper.startPage()自动分页
    @Test
    public void testSelectPage() {
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtils.openSession();
            // 起始行号,每页显示行数
            PageHelper.startPage(2, 10);
            Page<Goods> page = (Page) sqlSession.selectList("goods.selectPage");
            System.out.println("总条数:" + page.getTotal());
            System.out.println("总页数:" + page.getPages());
            System.out.println("开始页数:" + page.getStartRow());
            System.out.println("结束页数:" + page.getEndRow());
            // 获得当前页数据
            List<Goods> goods = page.getResult();
            for (Goods goods1 : goods) {
                System.out.println(goods1.getTitle());
            }
        } catch (Exception e) {
            throw e;
        } finally {
            MyBatisUtils.closeSqlSession(sqlSession);
        }
    }
    

    相关文章

      网友评论

        本文标题:十, Mybatis之PageHelper分页插件

        本文链接:https://www.haomeiwen.com/subject/qsmdaktx.html