My batis 拦截器介绍 1.1 目录 1.1 目录 1.2 前言 1.3 Interceptor 接口 1.4 注册拦截器 1.5 Mybatis 可拦截的方法 1.6 利用拦截器进行分页 1.2 前言 拦截器的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截的方法时执行自己的逻辑而不再执行被拦截的方法。Mybatis 拦截器设计的一个初衷就是为了供用户在某些时候可以实现自己的逻辑而不必去动Mybatis 固有的逻辑。打个比方,对于Executor,Mybatis 中有几种实现:BatchExecutor、ReuseExecutor、SimpleExecutor 和 CachingExecutor。这个时候如果你觉得这几种实现对于Executor 接口的query 方法都不能满足你的要求,那怎么办呢?是要去改源码吗?当然不。我们可以建立一个Mybatis 拦截器用于拦截Executor 接口的query 方法,在拦截之后实现自己的query 方法逻辑,之后可以选择是否继续执行原来的query 方法。 1.3 Interceptor 接口 对于拦截器Mybatis 为我们提供了一个Interceptor 接口,通过实现该接口就可以定义我们自己的拦截器。我们先来看一下这个接口的定义: Java 代码 1. package org.apache.ibatis.plugin; 2. 3. import java.util.Properties; 4. 5. public interface Interceptor { 6. 7. Object intercept(Invocation invocation) throws Throwable; 8. 9. Object plugin(Object target); 10. 11. void setProperties(Properties properties); 12. 13. } 我们可以看到在该接口中一共定义有三个方法,intercept、plugin 和 setProperties。plugin 方法是拦截器用于封装目标对象的,通过该方法我们可以返回目标对象本身,也可以返回一个它的代理。当返回的是代理的时候我们可以对其中的方法进行拦截来调用 intercept方法,当然也可以调用其他方法,这点将在后文讲解。setProperties 方法是用于在Mybatis配置文件中指定一些属性的。 定义自己的 Interceptor 最重要的是要实现 plugin 方法和 intercept 方法,在plugin 方法中我们可以决定是否要进行拦截进而决定要返回一个什么样的目标对象。而 intercept 方法就是要进行拦截的时候要执行的方法。 对于 plugin 方法而言,其实 Mybatis 已经为我们提供了一个实现。Mybatis 中有一个叫做 Plugin 的类,里面有一个静态方法wrap(Object target,Interceptor int...