Mybatis的分页插件pagehelper的简单使用

对于使用Mybatis时,最头痛的就是写分页,需要先写一个查询count的select语句,然后再写一个真正分页查询的语句,当查询条件多了之后,会发现真不想花双倍的时间写count和select,所以这个时候我们可以使用Mybatis的分页插件pagehelper

1.首先架包的导入https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper
2. 配置拦截器插件

<!--
    plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
    properties?, settings?,
    typeAliases?, typeHandlers?,
    objectFactory?,objectWrapperFactory?,
    plugins?,
    environments?, databaseIdProvider?, mappers?
-->
<!-- 配置分页拦截器插件:拦截sql语句 -->
<plugins>
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
			<property name="supportMethodsArguments" value="true"/>
	</plugin>
</plugins>

接下来使用一个实例来测试:
实体类:

public class Emp {
	private int empno;
	private String ename;
	private String job;
	private int sal;

	public int getSal() {
		return sal;
	}
	public void setSal(int sal) {
		this.sal = sal;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	public int getEmpno() {
		return empno;
	}
	public void setEmpno(int empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	@Override
	public String toString() {
		return "Emp [empno=" + empno + ", ename=" + ename + ", job=" + job + ", sal=" + sal + "]";
	}
}

接口类:

public interface EmpMapper {
	
	public List<Emp> queryEmp(String name);
	public List<Emp> queryEmp1(String name,@Param("pageNum") int pageNum,@Param("pageSize") int pageSize);
}

测试类:

public class TestMybatis {
	// 获取SqlSession对象
	public static SqlSession getSession() {
		/*这里的路径可能你门要改*/
		String resource = "config.xml";
		InputStream resourceAsStream = TestMybatis.class.getResourceAsStream(resource);
		// session工厂 负责产生会话
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
		// 会话就是打开了和数据库的链接
		SqlSession openSession = sqlSessionFactory.openSession();
		return openSession;
	}
	
	/**
	 * 
	 * 物理分页(推荐使用)
	 */
	@Test
	public void test() {
		SqlSession session = getSession();
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		
		// 参数是(页数,每页的数据量)
		PageHelper.startPage(0, 3);
		
		// 根据分页将查询出的数据存到List里面
		List<Emp> queryEmp = mapper.queryEmp("%%");
		System.out.println(queryEmp.size());
		
		// 查询出总数据量
		PageInfo pi = new PageInfo(queryEmp);
		System.out.println(pi.getTotal());
	}
	
	
	/**
	 * 	参数中的两个分页的值必须在接口中打上固定的别名
	 * 		同时在configxml中的配置里配置属性:supportMethodsArguments=true
	 * 物理分页
	 */
	
	@Test
	public void test1() {
		SqlSession session = getSession();
		EmpMapper mapper = session.getMapper(EmpMapper.class);
		List<Emp> queryEmp1 = mapper.queryEmp1("%小%", 2, 10);
		System.out.println(queryEmp1.size());
		// 查询出总数据量
		PageInfo pi = new PageInfo(queryEmp1);
		System.out.println(pi.getTotal());
	}
}

config.xml

<?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>
	<!-- 这里是资源文件路径 -->
	<properties resource="jdbc.properties"></properties>
	<!-- 打印出运行日志 -->
	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>

	<!-- 配置分页拦截器插件:拦截sql语句 -->
	<plugins>
		<plugin interceptor="com.github.pagehelper.PageInterceptor">
			<property name="supportMethodsArguments" value="true"/>
		</plugin>
	</plugins>

	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbcDriver}" />
				<property name="url" value="${jdbcUrl}" />
				<property name="username" value="${jdbcUsername}" />
				<property name="password" value="${jdbcPassword}" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="com/pk/lesson04/pagehelper/empMapping.xml"></mapper>
	</mappers>
</configuration>

与接口对应的映射xml文件: empMapping.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 映射文件规范: namespace属性不能少 sql语句 >>查询 必须告知单行返回的类型 -->
<mapper namespace="com.pk.lesson04.pagehelper.EmpMapper">
	
	<select id="queryEmp" resultType="com.pk.lesson04.pagehelper.Emp">
		select * from emp where ename like #{0}
	</select> 
	
	<select id="queryEmp1" resultType="com.pk.lesson04.pagehelper.Emp">
		select * from emp where ename like #{0}
	</select> 
</mapper>

猜你喜欢

转载自blog.csdn.net/wufewu/article/details/84099430