MyBatis插件之PageHelper分页

今天做项目的时候需要使用到分页技术,刚好了解到一款分页插件可以使用mybatis进行配置,因此学习使用之后写下这篇博客,巩固自己以及供大家学习使用。

什么是PageHelper

如果你也在用Mybatis,建议尝试该分页插件,这个一定是最方便使用的分页插件。
该插件目前支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库分页。

如何使用PageHelper

分页插件项目中的正式代码一共有个5个Java文件,这5个文件的说明如下:
- Page[必须]:分页参数类,该类继承ArrayList,虽然分页查询返回的结果实际类型是Page,但是可以完全不出现所有的代码中,可以直接当成List使用。返回值不建议使用Page,建议仍然用List。如果需要用到分页信息,使用下面的PageInfo类对List进行包装即可。
- PageHelper[必须]:分页插件拦截器类,对Mybatis的拦截在这个类中实现。
- PageInfo[可选]:Page的包装类,包含了全面的分页属性信息。
- SqlParser[可选]:提供高效的count查询sql。主要是智能替换原sql语句为count(*),去除不带参数的order by语句。需要jsqlparser-0.9.1.jar支持。
- SqlUtil[必须]:分页插件工具类,分页插件逻辑类,分页插件的主要实现方法都在这个类中

  1. 引入分页插件 – 提供三种方式
    • 引入分页代码
    • 引入jar包
    • 使用Maven引入 – 此处使用maven进入引入
      添加如下依赖:
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>3.4.2</version>
</dependency>
<dependency>
    <groupId>com.github.jsqlparser</groupId>
    <artifactId>jsqlparser</artifactId>
    <version>0.9.1</version>
</dependency>
  1. 在SqlMapConfig.xml中进行配置
<!-- 配置PageHelper插件 -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 配置数据库方言 -->
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>
  • dialect属性,使用时必须指定该属性,可选值为oracle,mysql,mariadb,sqlite,hsqldb,postgresql,没有默认值,必须指定该属性。

    1. 在代码中使用
public class PageHelperTest {
    @Test
    public void testPageHelper(){
        //读取Spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/applicationContext-dao.xml");
        //使用mybatis的Mapper动态代理进行开发,获取到接口mapper
        TbItemMapper itemMapper = context.getBean(TbItemMapper.class);

        //设置分页信息 -- 必须要放在查询的前面
        PageHelper.startPage(1,10);
        //执行查询 -- 此时使用的方法和参数是用过mybatis的逆向工程生成的mapper和pojo
        List<TbItem> itemList = itemMapper.selectByExample(new TbItemExample());

        //获取分页信息
        PageInfo<TbItem> pageInfo = new PageInfo<>(itemList);
        System.out.println(pageInfo.getTotal());
        System.out.println(pageInfo.getSize());
    }
}

重要提示

  1. PageHelper.startPage方法
    只有紧跟在PageHelper.startPage方法后的第一个Mybatis的查询(Select方法)方法会被分页。

  2. 分页插件不支持带有for update语句的分页
    对于带有for update的sql,会抛出运行时异常,对于这样的sql建议手动分页,毕竟这样的sql需要重视。

  3. 分页插件不支持关联结果查询
    原因以及解决方法可以看这里:
    http://my.oschina.net/flags/blog/274000
    分支插件不支持关联结果查询,但是支持关联嵌套查询。只会对主sql进行分页,嵌套的sql不会被分页。

相关链接

GitHub的项目地址:https://github.com/pagehelper/Mybatis-PageHelper


感谢阅读本博客。

欢迎关注我的博客:https://li-weijian.github.io/

欢迎联系我共同交流

猜你喜欢

转载自blog.csdn.net/qq352642663/article/details/80140196