您当前的位置: 首页 >  mybatis

Charge8

暂无认证

  • 2浏览

    0关注

    447博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Mybatis 分页插件PageHelper

Charge8 发布时间:2018-11-21 15:19:16 ,浏览量:2

PageHelper是一款好用的开源免费的Mybatis第三方物理分页插件

使用非常简单

1、maven web项目,pom.xml 引入  pagehelper 依赖


		
		    com.github.pagehelper
		    pagehelper
		    5.1.4
		

2、在Mybatis中全局配置文件中配置拦截器插件


	
		
			
            
		
	

3、Mapper映射文件和以前书写没有区别,里面不要使用分页语句就行,交给分页插件来完成

  public List selectUserBylike(@Param("username") String username,
				     @Param("state") Integer state);

  		
	  select 
	  	 
	  from t_user
	  
		  			
		  		and username like concat('%',concat(#{username},'%')) 	
		  		
		  			
		  		and state like #{state}		
		  	
	  		
  

4、分页插件支持好几种调用方式:Mapper接口方式的调用(推荐使用)

        设置分页:PageHelper.startPage(当前页码,每页多少条)

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

        Page类:其实就是ArrayList的子类,封装了分页相关的信息

        PagerInfo类:封装了更丰富分页相关的信息,更多使用它,PageInfo的属性参数,成员变量如下:

    //当前页
    private int pageNum;
 
    //每页的数量
    private int pageSize;
 
    //当前页的数量
    private int size;
 
    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"
    //当前页面第一个元素在数据库中的行号
    private int startRow;
 
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总记录数
    private long total;
 
    //总页数
    private int pages;
 
    //结果集(每页显示的数据)
    private List list;
 
    //第一页
    private int firstPage;
 
    //前一页
    private int prePage;
 
    //是否为第一页
    private boolean isFirstPage = false;
 
    //是否为最后一页
    private boolean isLastPage = false;
 
    //是否有前一页
    private boolean hasPreviousPage = false;
 
    //是否有下一页
    private boolean hasNextPage = false;
 
    //导航页码数
    private int navigatePages;
 
    //所有导航页号
    private int[] navigatepageNums;
			Page Page = PageHelper.startPage(1, 10);//第1页的10个数据
			
			//List userList = userMapper.selectUserBylike("admin",1);
			List userList = userMapper.selectUserBylike(null,null);
			
			//使用PageInfo对象获取,目的是把List强转成Page对象,从而得到分页结果  
			PageInfo pageInfo = new PageInfo(userList);
			System.out.println(pageInfo);
			System.out.println(pageInfo.getTotal());
			System.out.println(pageInfo.isHasNextPage());

   

注意:什么时候会导致不安全的分页?

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

       只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。

       如果代码在进入 Executor 前发生异常,就会导致线程不可用,这属于人为的 Bug(例如接口方法和 XML 中的不匹配,导致找不到 MappedStatement 时), 这种情况由于线程不可用,也不会导致 ThreadLocal 参数被错误的使用。

 

参考文章:PageHelper分页插件源码及原理剖析

 

GitHub地址:https://github.com/pagehelper/Mybatis-PageHelper/blob/master/README_zh.md

码云地址:https://gitee.com/free/Mybatis_PageHelper

    文档地址:https://apidoc.gitee.com/free/Mybatis_PageHelper

    Method API: https://apidoc.gitee.com/free/Mybatis_PageHelper/com/github/pagehelper/page/PageMethod.html

更多信息(比如:springboot集成它)查看官方文档,资料挺多,看它们就ok

 

ends~

关注
打赏
1664721914
查看更多评论
立即登录/注册

微信扫码登录

0.0392s