您的位置:首页 > 其它

Mybatis 分页插件 PageHelper 的使用

2017-09-18 11:12 561 查看
    在MySQL中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的。但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的逆向工程来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了。
    可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过逆向工程生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了。PageHelper 插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL 六种数据库分页。
    下面直接说PageHelper 的使用方法:

1.需要引入PageHelper的jar包
     如果没有使用maven,那直接把jar包导入到lib文件夹下即可,这个PageHelper插件在github上有开源,地址为:https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper
如果使用了maven,那么只要在pom.xml中引入该插件即可,引入如下:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.4</version>
</dependency>

2.在mybatis的全局配置文件SqlMapConfig.xml中配置该插件
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration
PUBL
4000
IC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd";>
<configuration>

<!-- 配置分页插件 -->
<plugins>
<plugin interceptor="com.github.pagehelper.PageHelper">
<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
<property name="dialect" value="mysql"/>
</plugin>
</plugins>

</configuration>

3. 在执行sql前添加插件,完成分页功能
    在查询的sql语句执行之前,添加一行代码PageHelper.startPage(1,
10);第一个参数表示第几页,第二个参数表示每页显示的记录数。这样在执行sql后就会将记录按照语句中设置的那样进行分页。如果需要获取总记录数的话,需要PageInfo类的对象,这个对象可以获取总记录数,下面看下测试的代码。
public class TestPageHelper {

@Test
public void testPageHelper() {
// 创建一个spring容器
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-*");
// 从spring容器中获取mapper代理对象
TbItemMapper mapper = context.getBean(TbItemMapper.class);
// 执行查询并分页,TbItemExample是逆向工程自动生成的,用来进行条件查询,这里不设置则表示无条件
TbItemExample example = new TbItemExample();
//分页处理,显示第一页的10条数据
PageHelper.startPage(1, 10);
List<TbItem> list = mapper.selectByExample(example);//查询
// 取商品列表
for(TbItem item : list) {
System.out.println(item.getTitle());
}
// 取分页信息
PageInfo<TbItem> pageInfo = new PageInfo<TbItem>(list);
long total = pageInfo.getTotal(); //获取总记录数
System.out.println("共有商品信息:" + total);
}
}

    看下执行的结果:

夏普(SHARP)LCD-46DS40A 46英寸 日本原装液晶面板 智能全高清液晶电视 
飞利浦 老人手机 (X2560) 深情蓝 移动联通2G手机 双卡双待 
中兴 U288 珠光白 移动3G手机 
三星 SCH-W899 亮金色 电信3G手机 双卡双待双通 
飞利浦 老人手机 (X2560) 喜庆红 移动联通2G手机 双卡双待 
飞利浦 老人手机 (X2560) 硬朗黑 移动联通2G手机 双卡双待 
三星 Galaxy S4 (I9500)16G版 皓月白 联通3G手机 
三星 Galaxy S4 (I9500) 16G版 星空黑 联通3G手机 
三星 I8552 白色 联通3G手机 双卡双待 
长虹(CHANGHONG) 3D51C1080i 51英寸 快门式3D智能Android 电视(黑色) 
共有商品信息:3098

     可以看到,只显示出了10条数据,但是我总共有3098条数据,如果将参数改成(2,10),那么就会显示第二页不同的10条数据,在这就不测试了。这说明PageHelper插件可以帮助我们实现分页功能,例如EasyUI中就会传到后台分页参数信息,后台就可以根据参数获取分页数据等等。 
    正如前面所说,这个PageHelper其实也有缺点,因为它对逆向工程生成的代码支持不好,不能对有查询条件的查询分页,会抛异常,上面是无条件查询的。当然,我们自己可以修改这个PageHelper插件,使其支持条件查询,当然,我是修改不了的……网上有修改过后的PageHelper插件,可以支持条件查询,相对来说就比较强大了,可以在自己的工程中依赖修改过后的分页插件进行开发。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: