mybatis|mybatis 插件
Mybatis插件又称拦截器,本篇文章中出现的拦截器都表示插件。
Mybatis采用责任链模式,通过动态代理组织多个插件(拦截器),通过这些插件可以改变Mybatis的默认行为(诸如SQL重写之类的),由于插件会深入到Mybatis的核心,因此在编写自己的插件前最好了解下它的原理,以便写出安全高效的插件。
MyBatis 允许你在已映射语句执行过程中的某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用包括:
- Executor 接口中的方法:update, query, flushStatements, commit, rollback, getTransaction, close, isClosed
- ParameterHandler接口中的方法:getParameterObject, setParameters
- ResultSetHandler 接口中的方法:handleResultSets, handleOutputParameters
- StatementHandler 接口中的方法:prepare, parameterize, batch, update, query
- 拦截执行器的方法
- 拦截参数的处理
- 拦截结果集的处理
- 拦截Sql语法构建的处理
Mybatis四大接口
既然Mybatis是对四大接口进行拦截的,那我们先要知道Mybatis的四大接口是哪些: Executor, StatementHandler, ResultSetHandler, ParameterHandler。
Mybatis插件能够对这四大对象进行拦截,可以说包含到了Mybatis一次SQL执行的所有操作。可见Mybatis的的插件很强大。
- Executor是 Mybatis的内部执行器,它负责调用StatementHandler操作数据库,并把结果集通过 ResultSetHandler进行自动映射,另外,他还处理了二级缓存的操作。从这里可以看出,我们也是可以通过插件来实现自定义的二级缓存的。
- StatementHandler是Mybatis直接和数据库执行sql脚本的对象。另外它也实现了Mybatis的一级缓存。这里,我们可以使用插件来实现对一级缓存的操作(禁用等等)。
- ParameterHandler是Mybatis实现Sql入参设置的对象。插件可以改变我们Sql的参数默认设置。
- ResultSetHandler是Mybatis把ResultSet集合映射成POJO的接口对象。我们可以定义插件对Mybatis的结果集自动映射进行修改。
Mybatis的插件实现要实现Interceptor接口,我们看下这个接口定义的方法。
public interface Interceptor {
/**
* 拦截目标对象中目标方法的执行
* @param invocation
* @return
* @throws Throwable
*/
Object intercept(Invocation invocation) throws Throwable;
/**
* 包装目标对象,即为目标对象创建一个代理对象
* @param target
* @return
*/
Object plugin(Object target);
/**
*可以获取插件注册时,传入的property属性
* @param properties
*/
void setProperties(Properties properties);
}
【mybatis|mybatis 插件】http://blog.sina.com.cn/s/blog_14905e10f0102xmij.html
推荐阅读
- 关于QueryWrapper|关于QueryWrapper,实现MybatisPlus多表关联查询方式
- mybatisplus如何在xml的连表查询中使用queryWrapper
- mybatisplus|mybatisplus where QueryWrapper加括号嵌套查询方式
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- jQuery插件
- VueX--VUE核心插件
- 用npm发布一个包的教程并编写一个vue的插件发布
- 插件化无法获取或找到.so文件
- maven使用tomcat7插件编译jsp出错