十, Mybatis之PageHelper分页插件

一,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增加Plungin配置
<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);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36792120/article/details/112474714