浅谈myBatis中的插件机制
在mybatis-config.xml配置文件中配置plugin结点,比如配置一个自定义的日志插件LogInterceptor和一个开源的分页插件PageInterceptor:借助责任链模式,定义一系列的过滤器,在查询等方法执行时进行过滤,从而达到控制参数、调整查询语句和控制查询结果等作用。而getAllInterfaces方法是依据不同的目标对象进行过滤的过程,只给对应的目标进行注册:至此,实际使用的Executor对象将是通过动态代理生成的Plugin实例。造成了注册顺序和执行顺序相反的现象。pagehelper是一个实现物理分页效果的开源插件,并且在底层通过Dialect类适配了不同的数据库,其主要作用是拦截sql查询,构造一个查询总数的新的以"_COUNT"结尾的新sql,最终再进行分页查询。type即为在工作原理分析中提到的Executor、ParameterHandler、ResultSetHandler和StatementHandler,method配置对应接口中的方法。
下载地址
用户评论