MyBatis加强(2)~mybatis 插件开发 【分页插件-PageHelper】

## 一、插件介绍【动态代理】

1、插件【动态代理】:mybatis 允许在已经映射的语句的执行过程的某个时机进行拦截增强的机制。

2、mybatis中的组件动态代理的运用:

MyBatis 在四大组件对象的创建过程中,都会有插件进行调用执行。

我们可以利用动态机制对目标对象实施拦截增强操作,也就是在目标对象执行目标方法之前进行拦截增强的效果。

  • Excutor(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • Parameter(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
  • RestultSetHandler(handleResultSets, handleOutputParameters)
  • StatementHandler(prepare, parameterize, batch, update, query)

3、插件开发步骤:

(1)编写插件实现Intercetor接口,并使用@Intercepts 注解完成插件签名
(2)在全局配置文件中使用 元素注册插件
//标注对哪个组件的哪个方法做拦截增强
//对组件ResultSetHandler中的handleResultSets(Statement st)方法进行拦截增强
@Intercepts({@Signature(
		  type= ResultSetHandler.class ,//
		  method = "handleResultSets",//
		  args = {Statement.class})})//
public class DemoIntercetor implements Interceptor{
	
	//如何增强
	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		System.out.println("拦截增强啦");
		return invocation.proceed();//放行
	}
}
<!--全局配置文件-->
<!-- 注册拦截器 -->
<plugins>
 	<plugin interceptor="com.shan.mybatis.plugin.DemoIntercetor"></plugin>
</plugins>

二、MyBatis 分页插件-PageHelper

1、依赖:

  • jsqlparser.jar
  • pagehelper.jar

2、配置,在全局映射文件配置分页插件:

<!-- 全局映射文件 -->
<!-- 配置插件 -->
<plugins>
	<!-- com.github.pagehelper为PageHelper类所在包名 -->
	<plugin interceptor="com.github.pagehelper.PageInterceptor">
	<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
		<property name="helperDialect" value="mysql" />
	</plugin>
</plugins>

■ 配置完成,只需要在映射文件书写查询结果集的元素,然后测试的时候添加上:PageHelper.startPage(3, 3); 就实现了分页效果

//mapper接口
public interface EmployeeMapper {
	List<Employee> queryList();
}

<!-- 映射文件 -->
<select id="queryList" resultType="Employee">
	select  id, name, sn, salary from employee	
</select>

//测试
@Test
public void testPagePlugin() throws Exception {
	EmployeeMapper employeeMapper = MyBatisUtil.getMapper(EmployeeMapper.class);
	PageHelper.startPage(3, 3);
	List<Employee> emps = employeeMapper.queryList();
	for (Employee employee : emps) {
		System.out.println(employee);
	}
    System.out.println("============================================================");
    //测试分页插件的接口PageInfo,好比是咱的PageResult
	PageInfo pageInfo = new PageInfo(emps);
	System.out.println(pageInfo.getTotal());
	System.out.println(pageInfo.getList());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coder-coco

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值