MyBatis中的plugins是用来进行某点拦截用的,它允许的调用有以下四种:
• Executor (update,query, flushStatements, commit, rollback, getTransaction, close, isClosed)
• ParameterHandler (getParameterObject, setParameters)
• ResultSetHandler (handleResultSets, handleOutputParameters)
• StatementHandler (prepare, parameterize, batch, update, query)
我们可以自己创建一个拦截器:
package net.mybatis.override;
import java.util.Properties;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
@Intercepts({@Signature(
method = "update",
type = Executor.class,
args = { MappedStatement.class,Object.class })})
public class MyInterceptor implements Interceptor {
@Override
public Object intercept(Invocation arg0) throws Throwable {
return null;
}
@Override
public Object plugin(Object arg0) {
return null;
}
@Override
public void setProperties(Properties arg0) {
}
}
接着看MyInterceptor类上我们用@Intercepts标记了这是一个Interceptor,然后在@Intercepts中定义了一个
@Signature(拦截点)。我们定义了该Interceptor将拦截Executor接口中参数类型为MappedStatement、Object的update方
法。
之后通过在config文件中注册来使得我们自己创建的拦截器生效:
<plugins>
<plugin interceptor="net.mybatis.override.MyInterceptor">
<property name="some" value="100"/>
</plugin>
</plugins>
对于拦截器,MyBatis的四种拦截方式都已经定死了。如果想要扩展,那么只 修改MyBatis的核心,去覆盖
Configuration这个类,尽管,对于这种方法,会对MyBatis产生严重的影响。