Mybatis插件(plugin)开发

 

Mybatis插件编写:

  • 1、编写Interceptor的实现类
  • 2、使用@Intercepts注解完成插件签名
  • 3、将写好的插件注册到全局配置文件中
/**
 * 完成插件签名:
 *		告诉MyBatis当前插件用来拦截哪个对象的哪个方法
 */
@Intercepts(
		{
		@Signature(type=StatementHandler.class,method="parameterize",args=java.sql.Statement.class)
		})
public class MyFirstPlugin implements Interceptor{

	/**
	 *
	 * 拦截目标对象的目标方法的执行
	 */
	@Override
	public Object intercept(Invocation invocation) throws Throwable {
		// TODO Auto-generated method stub
		System.out.println("MyFirstPlugin...intercept:"+invocation.getMethod());
		//动态的改变一下sql运行的参数:以前1号员工,实际从数据库查询2号员工
		Object target = invocation.getTarget();
		System.out.println("当前拦截到的对象:"+target);
		//拿到:StatementHandler==>ParameterHandler===>parameterObject
		//拿到target的元数据
		MetaObject metaObject = SystemMetaObject.forObject(target);
		Object value = metaObject.getValue("parameterHandler.parameterObject");
		System.out.println("sql语句用的参数是:"+value);
		//修改完sql语句要用的参数
		metaObject.setValue("parameterHandler.parameterObject", 2);
		//执行目标方法
		Object proceed = invocation.proceed();
		//返回执行后的返回值
		return proceed;
	}

	/**
	 *
	 *包装目标对象的:为目标对象创建一个代理对象
	 */
	@Override
	public Object plugin(Object target) {
		// TODO Auto-generated method stub
		//我们可以借助Plugin的wrap方法来使用当前Interceptor包装我们目标对象
		System.out.println("MyFirstPlugin...plugin:mybatis将要包装的对象"+target);
		Object wrap = Plugin.wrap(target, this);
		//返回为当前target创建的动态代理
		return wrap;
	}

	/**
	 * 
	 *将插件注册时 的property属性设置进来
	 */
	@Override
	public void setProperties(Properties properties) {
		// TODO Auto-generated method stub
		System.out.println("插件配置的信息:"+properties);
	}

}

在全局配置文件中注册:

<!-- mybatis-config.xml -->
<plugins>
  <plugin interceptor="org.mybatis.example.MyFirstPlugin">
    <property name="someProperty" value="100"/>
  </plugin>
</plugins>

 

插件是用来包装四大对象,拦截指定的方法:

  • Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)

  • ParameterHandler (getParameterObject, setParameters)

  • ResultSetHandler (handleResultSets, handleOutputParameters)

  • StatementHandler (prepare, parameterize, batch, update, query)

     

四大对象在执行增删改查方法的过程中的作用:

1)、Mappe代理对象调用DefaultSqlSession的增删改查方法,DefaultSqlSession实际上是调用Executor的update(增删改)、query;

2)、Executor会创建一个StatementHandler对象(同时也会创建出ParameterHandler和ResultSetHandler)

3)、Executor使用StatementHandler预编译sql,以及使用ParameterHandler来给sql设置参数

4)、Executor调用StatementHandler的增删改查方法;

5)、ResultSetHandler封装结果集

 

在四大对象创建的时候,并不是直接直接返回,都会调用interceptorChain.pluginAll(target):

public Object pluginAll(Object target) {
  //使用每一个插件来创建一个代理对象
		    for (Interceptor interceptor : interceptors) {
		      target = interceptor.plugin(target);
		    }
		    return target;
		  }

 

转载于:https://www.cnblogs.com/qzlcl/p/11312115.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
freemybatisplugin是一个用于MyBatis框架的插件,它可以简化MyBatis开发过程中的一些繁琐操作,让开发者更加高效地使用MyBatis。 要下载freemybatisplugin插件,首先需要打开浏览器,并进入freemybatisplugin的官方网站。在网站上,我们可以找到插件的下载链接。下载过程中可能需要提供一些基本的个人信息,例如邮箱地址等。 一旦下载完成,我们可以将插件文件(一般为jar文件)保存到合适的位置。接下来,需要将插件添加到我们所使用的IDE中。具体的添加方式根据不同的IDE而有所不同。 例如,对于IntelliJ IDEA这样的IDE,可以通过以下步骤添加插件: 1. 打开IDE,并进入“设置”菜单。 2. 在设置菜单中,找到“插件”选项。 3. 在插件选项中,找到“安装插件”按钮,并点击它。 4. 在弹出的文件选择窗口中,找到并选中之前下载的freemybatisplugin插件文件。 5. 点击“确定”按钮,开始安装插件。 6. 安装完成后,IDE会提示重启,点击“重启”按钮。 完成以上步骤后,freemybatisplugin插件就已经成功添加到IDE中了。接下来,我们可以在开发过程中使用插件提供的功能了。例如,插件可以帮助我们自动生成MyBatis的XML文件和Mapper接口,简化了繁琐的配置过程。 总之,通过以上步骤,我们可以方便地下载并安装freemybatisplugin插件,从而提高MyBatis开发的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值