mybatis拦截器使用实践

如题所述

第1个回答  2022-07-27
mybatis拦截器使用实践

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

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只更新修改时间;

将MybatisGmtInterceptor拦截器注册到sqlSessionFactory中

只要是这个sqlSessionFactory生产的sqlSession,执行insert和update语句时,就会自动更新创建及修改时间
相似回答
大家正在搜