MyBatis拦截器介绍

通过mybatis拦截器拦截某些方法的调用,在方法执行前后去执行一些逻辑,或执行这些被拦截的方法时不执行此方法执行自己的方法。

MyBatis中的各种对象:
sqlsession:表示和数据库交互的对话,完成必要数据库增删改查功能。
executor:负责调度,负责sql语句的生成
statementhandler:封装了statement传输器,将结果集转换成List集合
parameterhandler:转换参数
resultsethandler:将返回的结果集resultst转换成list类型的集合
typehandler:负责java类型和jdbc类型之间的转换
mappedstatement:与mapper.xml中select、update、delete、insert有关
sqlsource:生成sql语句,封装到boundsql对象中,返回
boundsql:表示动态生成的sql语句以及相应的参数信息
configuration:mybatis中所有配置信息都维持在configuration对象中

mybatis拦截器并不是每个对象中的方法都可以拦截,只能拦截executor、parameterhandler、statemanethandler、resultsethandler
四个对象里面的方法。

1.mybatis中所有mapper语句的执行都是通过executor进行的。executor是mybatis的核心接口。update
方法执行增删改,query方法执行查询
2.parameterhandler设置参数的时候调用,如果对参数做自定义逻辑处理,可以通过拦截parameterhandler来实现。
3.statementhandler负责处理mybatis与jdbc之间statement的交互
4.resultsethandler用于需要对查询到的结果做特殊处理的时候

拦截器的使用分两步,一是自定义拦截器类,二是注册拦截器类
自定义拦截器类需要实现interceptor接口,还需要在自定义拦截器类上添加@intercepts注解

interceptor接口里有三个方法
1.interceptor方法 代理对象每次调用的方法,就是进行拦截的时候要执行的方法,在这个方法里可以做自定义的逻辑处理
2.plugin方法 封装目标对象,通过该方法可以返回目标对象本身,也可以返回一个它的代理
3.setProperties方法 用于在Mybatis配置文件中指定一些属性,注册当前拦截起的时候可以设置一些属性

@Intercepts注解
需要一个Signature(拦截点)参数数组。通过Signature来指定拦截那个对象里面的哪个方法。
Class<?> type(); 定义拦截的类 Executor、ParameterHandler、StatementHandler、ResultSetHandler当中的一个 String method();在定义拦截类的基础上,在定义拦截的方法 Class<?>[] args();在定义拦截方法的基础上再定义拦截方法对应的参数(因为方法可能重载,不定义参数不能唯一确定拦截哪个方法)

注册拦截器就是告诉Mybatis去使用我们的拦截器。实际上就是交由spring容器去维护我们的自定义拦截器对象
在@Configuration注解的类里面 用@Bean自定义的拦截器类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值