【MyBatis】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的使用。

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中引入该插件即可,引入如下:

 


    com.github.pagehelper
    pagehelper
    4.1.4

 

 

2. 在mybatis的全局配置文件SqlMapConfig.xml中配置该插件

复制代码




    
    
        
                    
            
        
    

复制代码

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 list = mapper.selectByExample(example);//查询
        // 取商品列表
        for(TbItem item : list) {
            System.out.println(item.getTitle());
        }
        // 取分页信息
        PageInfo pageInfo = new PageInfo(list);
        long total = pageInfo.getTotal(); //获取总记录数
        System.out.println("共有商品信息:" + total);
    }
}

 

但是启动会发现报错

com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor和oracle不识别

原因:配置中实现的是com.github.pagehelper.PageHelper这个接口,而错误报的是这个借口在强转成org.apache.ibatis.plugin.Interceptor这个借口的时候报错了,而我使用的是pageheper5.1.2版本,上网一查,自4.0.0版本以后就不再实现这个接口了,转而实现这个接口:org.apache.ibatis.plugin.Interceptor

 
       
                  
           
       

   

出现的错误二:
错误的信息很明显,oracle类不识别,最终原因还是因为版本的问题,自4.0.0以后的版本已经可以自动识别数据库了,所以不需要我们再去指定数据库,所以,修改配置:

       
                
              
       

   

我这里把配置数据库的一行代码给注释掉了,修改完毕之后,启动正常。
 

你可能感兴趣的:(【MyBatis】MyBatis分页插件PageHelper的使用)