PageHelper 分页插件

分页查询

假设数据表很大,你需要将数据库分成N页, 一页10条数据,你需要查询第100页的10条数据。如果直接写死在 SQL 语句中则会很死板,而且扩展性不强。

这时候如果有一个分页的插件, 可以按照预定的分页规则,一页多少条数据,查询第几页,那么就会非常方便。 PageHelper 就是这样一个插件。

Maven 中添加依赖

在 pom.xml 中添加下面两个标签:

    <!-- page helper 插件       -->
    <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>

mybatis-config.xml 下增加 plugin 配置

D:\intro_Java\MyBatis\src\main\resources\mybatis-config.xml 下增加 <plugin> 标签:

    <!-- pagehelper 插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 设置数据库类型 -->
            <property name="helperDialect" value="mysql"/>
            <!-- 分页合理化 -->
            <property name="reasonable" value="true"/>
        </plugin>
    </plugins>

goods.xml 增加一个测试标签

D:\intro_Java\MyBatis\src\main\resources\mappers\goods.xml中增加下面这个标签:

    <select id="selectPage" resultType="indi.chester.mybatis.entity.Goods" >
        SELECT  * FROM  babytun.t_goods WHERE current_price &lt; 1000
    </select>

调用 PageHelper

MyBatis\src\test\java\MyBatisTest.java 中添加下面这个测试方法:

    @Test
    public void testPageHelper () throws Exception{
        SqlSession sqlSession=null;
        try {
            sqlSession=MyBatisUtils.openSession();
            //查询第二页,每一页有10条数据
            PageHelper.startPage(2,10);
            Page<Goods> page = (Page) sqlSession.selectList("goods.selectPage");
            System.out.println("总页数 : "+page.getPages());
            System.out.println("总记录数 : "+page.getTotal());
            System.out.println("开始行号 : "+page.getStartRow());
            System.out.println("结束行号 : "+page.getEndRow());
            System.out.println("当前页码 : "+page.getPageNum());
            List<Goods> pageData = page.getResult();//当前页数据
            for (Goods g : pageData){
                System.out.println(g.getTitle());
            }
        }catch (Exception e){
            e.printStackTrace();
            throw e;
        }finally {
            MyBatisUtils.closeSession(sqlSession);
        }

    }

运行结果:

16:01:35:367 [main]  DEBUG goods.selectPage_COUNT -==>  Preparing: SELECT count(0) FROM babytun.t_goods WHERE current_price < 1000  
16:01:35:397 [main]  DEBUG goods.selectPage_COUNT -==> Parameters:  
16:01:35:436 [main]  DEBUG goods.selectPage_COUNT -<==      Total: 1 
16:01:35:443 [main]  DEBUG goods -Cache Hit Ratio [goods]: 0.0 
16:01:35:443 [main]  DEBUG goods.selectPage -==>  Preparing: SELECT * FROM babytun.t_goods WHERE current_price < 1000 LIMIT ?, ?  
16:01:35:444 [main]  DEBUG goods.selectPage -==> Parameters: 10(Integer), 10(Integer) 
16:01:35:449 [main]  DEBUG goods.selectPage -<==      Total: 10 
总页数 : 181
总记录数 : 1808
开始行号 : 10
结束行号 : 20
当前页码 : 2
兰多 升级版时尚妈咪包 桔色
康泰 家用智能胎心仪 分体探头操作方便 外放聆听 与家人分享宝宝心声
惠氏 启赋(Wyeth illuma)有机1段 900g (0-6月)婴儿配方奶粉(罐装)
惠氏 启赋(Wyeth illuma)有机2段900g(6-12月)较大婴儿配方奶粉(罐装)
惠氏启赋3段(12-36个月)幼儿配方奶粉900g *2罐
爱他美婴幼儿配方奶粉pre段800g 铂金版
【日本】尤妮佳MOONY 纸尿裤S84*3包
【日本】日本Moony XL38(男)拉拉裤*4包
【日本】Moony尤妮佳婴儿拉拉裤(男)L44片*3包
【日本】Moony尤妮佳婴儿裤型拉拉裤(女)L44*3包

Last updated