mybatis拦截器使用实践

mybatis拦截器使用实践

一.业务背景:

一般数据表中都有创建/修改时间字段,新增/修改数据时,更新时间戳。可以通过拦截器来实现这一需求

二.实现步骤

1.继承Interceptor接口,实现intercept方法

Interceptor接口

Interceptor接口中,有3个方法

intercept:拦截器的具体业务逻辑

plugin:生成代理对象

setProperties:给拦截器设置一些属性


拦截器的具体实现

@Intercepts:声明这是一个拦截器

@Signature:要拦截的具体方法,type-拦截接口,method-拦截的方法,args-重载时根据参数列表确定要拦截的方法

此处我们拦截的是 Executor 接口中的update方法,mybatis拦截器可以拦截4大接口,其他的这里不做陈述

intercept实现

1)首先拦截的目标对象是否正确,不是则不做处理;

2)因为只处理insert/update的sql,所以做个判断;

3)通过反射获取到DO中声明的字段,一般创建/修改时间这类公共字段都会写在基础父类中,所以从父类中获取;

4)判断时insert还是update操作,insert则同时更新创建及修改时间,update只更新修改时间;


2.注册拦截器

将MybatisGmtInterceptor拦截器注册到sqlSessionFactory中

数据源配置

3.小功告成

只要是这个sqlSessionFactory生产的sqlSession,执行insert和update语句时,就会自动更新创建及修改时间

你可能感兴趣的:(mybatis拦截器使用实践)