Mybatis分页插件pagehelper的使用

pagehelper是一个简单的实现分页技巧的插件,利用PageHelper可以很方便地对数据库查询结果进行分页。 

pagehelper的使用准备

我们要使用这个插件无可避免的需要引用它的jar包,你可以从下面的地址中下载最新版本的 jar 包

1:https://oss.sonatype.org/content/repositories/releases/com/github/pagehelper/pagehelper/

2:http://repo1.maven.org/maven2/com/github/pagehelper/pagehelper/

如果项目使用了maven,可以通过pomxml配置依赖



	com.github.pagehelper
	pagehelper
	5.0.0

pagehelper的版本问题频发,依赖或jar包导入后,启动项目以检查是否出现版本问题。

这里我使用的是4.1.4maven版本

一、首先,在xml中这样配置:




		
		
		
		
        
		
			
				
					
						
							dialect=mysql
							reasonable=true
							supportMethodsArguments=true
							params=count=countSql
							autoRuntimeDialect=true
							rowBoundsWithCount=true
						
					
				
			
		

二、模拟一个查询,用了PageHelper之后,查询语句我们简化一下。

  

这方法的配置是通过Mybatis generatorConfig 方法生成的xml配置稍加修改的成品。

三、Mapper、Services我就不帖代码了,直接调用即可,不需要传分页参数。下面是Controller:

@RequestMapping(value = "/selectUser",method = RequestMethod.POST)	
public @ResponseBody Response executionPagedList(
            @RequestParam(required=true,defaultValue="1") Integer page,
            @RequestParam(required=false,defaultValue="5") Integer pageSize)){
		Response response = new Response<>(false);
		try {
            //page为当前页数,pageSize为每页条数,"create_date desc"为order by(自动注入)
			PageHelper.startPage(page, pageSize,"create_date desc");
            //这里查询到了分页好的用户
			List result = userServices.selectUser();
			Map retMap = new HashMap<>();
            //转换成了Page(PageHelper的分页类)
			Page pages = (Page) result;
			if(pages!=null){
                //分页数据传递前台
				retMap.put("pagedList", pages.getResult());
				retMap.put("totalCount", pages.getTotal());
				retMap.put("totalPage", pages.getPages());
			}
			response.setData(retMap);
			response.setSuccess(true);
			return response;
		} catch (Exception e) {
			e.printStackTrace();
			response.setMsg("查询出现异常");
			return response;
		}
	}	 
  

在这里可以看到使用了三个参数,调用非常简单,只要在查询前调用一次即可注入到sql语句中。

PageHelper.startPage(page, pageSize,"create_date desc");

这段代码表示,程序开始分页了,page默认值是1,pageSize默认是5,意思是从第1页开始,每页显示5条记录,并且按照创建时间倒序。

调用后,sql发生了如下改变

/**注入前**/
select id, user_name, real_name, portrait, gender, create_time from sys_user
/**注入后**/
select id, user_name, real_name, portrait, gender, create_time from sys_user order by create_time desc limit 1,5

这是后台的分页就完成了,是不是非常简单呢。

PageInfo这个类是插件里的类,对应字段的翻译如下

    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;
    //排序
    private String orderBy;
 
    //由于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 int nextPage;
    //最后一页
    private int lastPage;
 
    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;

推荐文献

MyBatis Generator:https://blog.csdn.net/qq_36120267/article/details/81251679

PageHelper分页插件源码及原理剖析:https://blog.csdn.net/qq_36120267/article/details/81940481

你可能感兴趣的:(MyBatis)