mybatis拦截器使用实践
一.业务背景:
一般数据表中都有创建/修改时间字段,新增/修改数据时,更新时间戳。可以通过拦截器来实现这一需求
二.实现步骤
1.继承Interceptor接口,实现intercept方法
Interceptor接口中,有3个方法
intercept:拦截器的具体业务逻辑
plugin:生成代理对象
setProperties:给拦截器设置一些属性
@Intercepts:声明这是一个拦截器
@Signature:要拦截的具体方法,type-拦截接口,method-拦截的方法,args-重载时根据参数列表确定要拦截的方法
此处我们拦截的是 Executor 接口中的update方法,mybatis拦截器可以拦截4大接口,其他的这里不做陈述
1)首先拦截的目标对象是否正确,不是则不做处理;
2)因为只处理insert/update的sql,所以做个判断;
3)通过反射获取到DO中声明的字段,一般创建/修改时间这类公共字段都会写在基础父类中,所以从父类中获取;
4)判断时insert还是update操作,insert则同时更新创建及修改时间,update只更新修改时间;
2.注册拦截器
将MybatisGmtInterceptor拦截器注册到sqlSessionFactory中
3.小功告成
只要是这个sqlSessionFactory生产的sqlSession,执行insert和update语句时,就会自动更新创建及修改时间