1、Configuration加入到mybatis拦截器.
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author xxxx
*/
@Configuration
public class MybatisConfiguration {
@Bean
public Boolean setAutoFillValueInterceptor(SqlSessionFactory sqlSessionFactory) {
org.apache.ibatis.session.Configuration configuration = sqlSessionFactory.getConfiguration();
configuration.addInterceptor(new MybatisInterceptor());
return Boolean.TRUE;
}
}
2.配置拦截器
import com.mt.common.core.domain.model.LoginUser;
import com.mt.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
import org.apache.ibatis.mapping.SqlCommandType;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
import java.util.Date;
/**
* @Description:mybatis拦截器通过反射自动注入创建人、创建时间、修改人、修改时间
* @author: xxx
* @date: 2022年8月17日
*/
@Slf4j
@Component
@Intercepts({@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class MybatisInterceptor implements Interceptor {
/**
* 获取用户缓存信息
*/
public LoginUser getLoginUser() {
try{
return SecurityUtils.getLoginUser();
}catch (Exception e){
return new LoginUser();
}
}
@Override
public Object intercept(Invocation invocation) throws Throwable {
// TODO Auto-generated method stub
MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0];
SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType();
Object parameter = invocation.getArgs()[1];
if (parameter == null) {
return invocation.proceed();
}
//sql命令类型为插入,自动注入创建人信息
if (SqlCommandType.INSERT == sqlCommandType) {
LoginUser userEntity = getLoginUser();
if(null == userEntity){
return null;
}
Field[] fields = parameter.getClass().getDeclaredFields();
for (Field field : fields) {
log.info("------field.name------" + field.getName());
try {
// 注入创建用户id
if ("createBy".equals(field.getName())) {
field.setAccessible(true);
Object local_createBy = field.get(parameter);
field.setAccessible(false);
if (local_createBy == null || local_createBy.equals("")) {
if (userEntity != null) {
// 登录人账号
field.setAccessible(true);
field.set(parameter, userEntity.getUsername());
//field.set("updateBy", userEntity.getUsername());
field.setAccessible(false);
}
}
}
// 注入创建时间
if ("createTime".equals(field.getName())) {
field.setAccessible(true);
Object local_createDate = field.get(parameter);
field.setAccessible(false);
if (local_createDate == null || local_createDate.equals("")) {
field.setAccessible(true);
field.set(parameter, new Date());
//field.set("updateTime", new Date());
field.setAccessible(false);
}
}
} catch (Exception e) {
}
}
}
//sql命令类型为更新,自动注入修改人信息
if (SqlCommandType.UPDATE == sqlCommandType) {
LoginUser userEntity = getLoginUser();
if(null == userEntity){
return null;
}
Field[] fields = parameter.getClass().getDeclaredFields();
for (Field field : fields) {
log.info("------field.name------" + field.getName());
try {
// 注入创建用户id
if ("updateBy".equals(field.getName())) {
field.setAccessible(true);
Object local_createBy = field.get(parameter);
field.setAccessible(false);
if (local_createBy == null || local_createBy.equals("")) {
if (userEntity != null) {
// 登录人账号
field.setAccessible(true);
field.set(parameter, userEntity.getUsername());
field.setAccessible(false);
}
}
}
// 注入创建时间
if ("updateTime".equals(field.getName())) {
field.setAccessible(true);
Object local_createDate = field.get(parameter);
field.setAccessible(false);
if (local_createDate == null || local_createDate.equals("")) {
field.setAccessible(true);
field.set(parameter, new Date());
field.setAccessible(false);
}
}
} catch (Exception e) {
}
}
}
return invocation.proceed();
}
}