mybatis基于PageHelper插件实现分页

Mybatis是一个持久层,主要是操作sql语句的。项目数据的来源一般都是数据库,如果数据是十分庞大的,一下子把所有数据查询出来,会给数据库带来压力,所以不得不实现分页查询来降低数据库的压力。其实,实现在mybaits中实现分页,就是对sql查询语句的操作,显示想要显示的数据,十分简单。在JDBC中实现分页,首先要查询要分页数据的总数,然后再通过传递分页开始的索引和结束的索引(或者要显示的条数)这两个查询来查询每一页的数据,最后把相关的参数返回到前端页面中。
在mybatis中,也是按JDBC这个思路来实现分页的,但是在mybatis中可以通过PageHelper分页插件来简化分页步骤,这个插件主要是通过内部拦截器把要分页的sql语句进行拦截来实现分页的,其实思路也是一样的,把要分页的sql语句进行拦截,传入分页开始索引和结束索引进行查询,然后把总数和要分页的数据查询返回回来,只不过这些查询总数的sql语句不用我们来编写而已。
那么,如何使用PageHelper插件呢?

  1. 首先引入相关jar包(mybatis框架的jar包这里就忽略了)

jsqlparser-0.9.5.jar
pagehelper-4.1.4.jar

  1. 在mybatis的配置文件mybatis-config.xml中配置以下信息:
    对于不同数据库,分页的方式有所不同,所以要在下面配置信息中设置相关操作的数据库mysql
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0 //EN"
   "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--开启二级缓存  注意配置顺序 settings在前面 -->
    <settings>
       <setting name="cacheEnabled" value="true"/>
    </settings>
	<!-- 使用自动扫描包来定义别名 -->
	<typeAliases>
		<package name="com.koi.pojo" />
	</typeAliases>
	<!-- 配置分页插件 -->
	 <plugins>
		<plugin interceptor="com.github.pagehelper.PageHelper">
			<!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库 -->
			<property name="dialect" value="mysql" />
		</plugin>
	</plugins> 
</configuration>
  1. 创建分页工具ResuleVo类,主要是用来封装返回到前端页面分页表格的修改参数,对应不同的分页表格插件,返回的相关参数有所不同,这里是使用layui的分页表格插件,下面代码主要是对相关的参数实现了封装,其中code是响应的编码,msg为提示,这里主要提供了两个默认值,count代表总数,而data代表是要查询出来的数据:
package com.koi.vo;
public class  ResuleVo {
	private  Integer code;
	private  String msg;
	private  Long count;
	private  Object data;
	/**
	 * 返回layui表格数据格式
	 * @param count
	 * @param data
	 */
	public static ResuleVo toLayui(Long count,Object data){
		return new ResuleVo(count, data);
		
	}
	public  ResuleVo (Long count, Object data) {
		this.code = 0;
		this.msg = "";
		this.count = count;
		this.data = data;
	}
	public Integer getCode() {
		return code;
	}
	public void setCode(Integer code) {
		this.code = code;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public Long getCount() {
		return count;
	}
	public void setCount(Long count) {
		this.count = count;
	}
	public Object getData() {
		return data;
	}
	public void setData(Object data) {
		this.data = data;
	}
	
}

  1. 使用PageHelper插件所提供的相关对象方法:
    第一步,传入必要的两个参数当前页page和分页大小limit,然后调用PageHelper所提供静态方法startPage(),其中为该方法传入page和limit,最后一个boolean值代表是否开启分页。
    第二步,查询要分页的数据。
    第三步,通过查询出来的数据集合list进行分页。
    第四步,通过PageInfo返回的对象来查询总数,其中PageInfo对象包含了很多分页的信息。
    第五步,把总数和数据集合当作参数传入ResuleVo类返回。
@Override
	public ResuleVo selectPerAllocation(String info, Integer page, Integer limit) {
		//page 当前页 limit代表页面的大小 boolean代表是否开启分页
		PageHelper.startPage(page, limit, true);
		List<URolePermission> list = userPermissionMapper.selectPerAllocation(info);
		PageInfo<URolePermission> pageInfo = new PageInfo<URolePermission>(list);
		long count = pageInfo.getTotal();//总数
		return ResuleVo.toLayui(count, list);
	}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值