关于mybatis分页插件pageHelper的使用问题(无法分页、配置错误等)

0.前言

在使用mybatis开发的过程中,经常会遇到分页的问题,而这个时候,pageHelper的出现省去了很多我们分页中遇到的麻烦。不过遇到一个新东西,我们在使用中经常会遇到很多问题,我在这里总结一下。

1.分页

PageHelper是一个物理分页插件,它使用ThreadLocal获取到同一线程中的变量信息,各个线程之间的Threadlocal不会相互干扰,所以在多线程环境下,各个Threadlocal之间相互隔离,可以实现不同thread使用不同的数据源或不同的Thread中执行不同的SQL语句。所以PageHelper利用这一点,通过拦截器获取到同一线程中的预编译好的SQL语句之后将SQL语句包装成具有分页功能的SQL语句,并将其再次赋值给下一步操作,所以实际执行的SQL语句就是有了分页功能的SQL语句(来源:https://blog.csdn.net/jaryle/article/details/52315565)。

如何使用pageHelper进行分页呢,贴出一段模版代码:

        //pege:当前页码,从1开始(注意和limit的区别)
        //rows:每页显示个数    
        if(page == null || page <= 0) page = 1;
        if(rows == null || rows <= 0) rows = 30;
        //开始分页
        PageHelper.startPage(page,rows);
        //开始查询
        List items = itemMapper.selectByExample(new TbItemExample());
        //封装成一个pageInfo
        PageInfo itemInfo = new PageInfo<>(items);
        //总数
        Long total = itemInfo.getTotal();
        //结果集
        List result = itemInfo.getList();

注意分页只会在执行PageHelper.startPage(page,rows);后的第一个查询分页,因此你要是这样写


        //开始分页
        PageHelper.startPage(page,rows);
        if(test > 0){
            //开始查询
            List items = itemMapper.selectByExample(new TbItemExample());
        }
        //其他代码
        

可能会出现预期之外的分页,因为紧接startPage之后的查询不一定是if里面的,所以尽量避免这种写法,应该把startPage也加到if里面去。

2.配置问题

PageHelper本质上是一个mybatis拦截器,因此我们要使用,必须在xml中进行配置。

这是PageHelper老版本的配置:



 

    
        
            
            
        
    

这是最新版本的pageHelper5.x的配置,注意和老版本的区别:



 

    
        
            
            
        
    

因此你要是有提示错误,无法分页,可能是配置没有对。

3.总结

pageHelper的总结到此就结束啦,欢迎大家在评论区交流学习。

你可能感兴趣的:(maven,idea,mybatis)