MyBatis分页插件PageHelper的用法

好多天没写博客了,因为最近在实习,大部分时间在熟悉实习相关的东西,也没有怎么学习新的东西,这周末学习了MyBatis的一个分页插件PageHelper,虽然没有那么的强大(我在最后会说明它的缺点),但还是挺不错的。这篇博文主要来总结下如何使用PageHelper。
  我们知道,在mysql中,分页的sql是使用limit来做,如果我们自己写sql,那分页肯定是没有任何问题的。但是一旦model多了起来,复杂了起来,我们很自然的想到使用mybatis的****来生成相应的po和mapper,但是同时也会带来弊端,比如这里的分页问题就不好解决了。
  可能有人会说,我可以修改生成的文件,没错,这是可行的,但是一般我们通过****生成的文件,都不会去动它,所以这个时候,就需要使用分页插件来解决了。在介绍如何使用这个分页插件之前,先介绍一下mybatis中的插件是如何工作的,主要作用在哪个环节。我之前有写过一篇mybatis的一篇入门文章:宏观上把我mybatis框架。里面有张mybatis的工作原理图,为了方便叙述,我把图也放在这:


从图中可以看出,mybatis中首先要在配置文件中配置一些东西,然后根据这些配置去创建一个会话工厂,再根据会话工厂创建会话,会话发出操作数据库的sql语句,然后通过执行器操作数据,再使用mappedStatement对数据进行封装,这就是整个mybatis框架的执行情况。那么mybatis的插件作用在哪一环节呢?它主要作用在Executor执行器与mappedeStatement之间,也就是说mybatis可以在插件中获得要执行的sql语句,在sql语句中添加limit语句,然后再去对sql进行封装,从而可以实现分页处理。
  搞清楚了分页插件的执行情况,下面来总结下mybatis中PageHelper的使用。


本文来自 eson_15 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/eson_15/article/details/52270046?utm_source=copy MyBatis分页插件PageHelper的用法
从图中可以看出,mybatis中首先要在配置文件中配置一些东西,然后根据这些配置去创建一个会话工厂,再根据会话工厂创建会话,会话发出操作数据库的sql语句,然后通过执行器操作数据,再使用mappedStatement对数据进行封装,这就是整个mybatis框架的执行情况。那么mybatis的插件作用在哪一环节呢?它主要作用在Executor执行器与mappedeStatement之间,也就是说mybatis可以在插件中获得要执行的sql语句,在sql语句中添加limit语句,然后再去对sql进行封装,从而可以实现分页处理。
  搞清楚了分页插件的执行情况,下面来总结下mybatis中PageHelper的使用。


  1. 需要引入PageHelper的jar包

如果没有使用maven,那直接把jar包导入到lib文件夹下即可,这个PageHelper插件在github上有开源,地址为:[https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper。 ]
  (https://github.com/pagehelper/Mybatis-PageHelper/tree/master/src/main/java/com/github/pagehelper。)
  如果使用了maven,那么只要在pom.xml中引入该插件即可,引入如下:

com.github.pagehelper pagehelper 4.1.4
  1. 在mybatis的全局配置文件SqlMapConfig.xml中配置该插件
<?xml version="1.0" encoding="UTF-8" ?>
  1. 在执行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);
}

}