mybatis中PageHelper的使用

一、引入pagehelper的jar包

  如果是maven项目,pom里添加依赖:

                           
  com.github.pagehelper
     pagehelper
     4.1.4

二、在mybatis的配置文件中配置拦截(也可以在spring配置文件中配置)

     小编在mybatis配置文件SqlMapConfig.xml中配置的




  
      
          
          
      
  

   在spring中配置如下:


    
        
        
        
        

        
        
            
                
                    
                        
                        
                    
                
            
        
    

三、代码中如何实现

     Service中一个方法示例:

   mybatis中PageHelper的使用_第1张图片

EasyUIDataGridResult是自己封装的一个pojo,如下:
public class EasyUIDataGridResult implements Serializable {

    private long total;
    private List rows;

    public long getTotal() {
        return total;
    }

    public void setTotal(long total) {
        this.total = total;
    }

    public List getRows() {
        return rows;
    }

    public void setRows(List rows) {
        this.rows = rows;
    }

}

   如果不需要的话直接返回PageInfo就可以,例如:

四、注意事项

分页不安全的情况
PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。

只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。
如下代码是不安全的:
PageHelper.startPage(1, 10);
List list;
if(param1 != null){
    list = countryMapper.selectIf(param1);
} else {
    list = new ArrayList();
}
这种情况下由于 param1 存在 null 的情况,就会导致 PageHelper 生产了一个分页参数,但是没有被消费,这个参数就会一直保留在这个线程上。当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。
写成如下便安全了:
List list;
if(param1 != null){
    PageHelper.startPage(1, 10);
    list = countryMapper.selectIf(param1);
} else {
    list = new ArrayList();
}

另外也可以手动清理ThreadLocal存储的分页参数:
PageHelper.clearPage();




   

你可能感兴趣的:(-----【Java】)