MyBatis加强(4)~mybatis插件开发

博客 分享
0 275
优雅殿下
优雅殿下 2022-02-15 20:55:23
悬赏:0 积分 收藏

MyBatis加强(4)~mybatis 插件开发


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

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

  • 官网链接:https://gitee.com/free/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>//测试@Testpublic 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());}
posted @ 2022-02-15 20:49 一乐乐 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员