mybatis拦截器,实现插入或更新数据,自动注入创建人,修改人信息
import java.lang.reflect.Field;
import java.util.Date;
import org.apache.ibatis.binding.MapperMethod.ParamMap;
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.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ccl.order.api.user.entity.UserEntity;
import com.ccl.order.api.user.service.UserService;
import com.ccl.order.util.DataUtils;
import lombok.extern.slf4j.Slf4j;
/** * @ClassName: MybatisInterceptor * @Description:mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间 * @author: Ccl * @date: 2022年5月3日 上午10:05:06 * @Copyright: */ @Slf4j @Component @Intercepts({ @Signature(type = Executor.class, method = "update", args = { MappedStatement.class, Object.class }) }) public class MybatisInterceptor implements Interceptor { @Autowired UserService userService; @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) { UserEntity userEntity = userService.get_login_user(); Field[] fields = DataUtils.getFields(parameter.getClass()); for (Field field : fields) { log.debug("------field.name------" + field.getName()); try { // 注入创建用户id if ("createUserId".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.getId()); 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.setAccessible(false); } } // 注入公司id if ("companyId".equals(field.getName())) { field.setAccessible(true); Object local_sysOrgCode = field.get(parameter); field.setAccessible(false); if (local_sysOrgCode == null || local_sysOrgCode.equals("")) { if (userEntity != null) { field.setAccessible(true); field.set(parameter, userEntity.getCompanyId()); field.setAccessible(false); } } } } catch (Exception e) { } } } //sql命令类型为更新,自动注入修改人信息 if (SqlCommandType.UPDATE == sqlCommandType) { UserEntity userEntity = userService.get_login_user(); Field[] fields = null; if (parameter instanceof ParamMap) { ParamMap<?> paramMap = (ParamMap<?>) parameter; if (paramMap.containsKey("et")) { parameter = paramMap.get("et"); } else { parameter = paramMap.get("param1"); } fields = DataUtils.getFields(parameter.getClass()); } else { fields = DataUtils.getFields(parameter.getClass()); } for (Field field : fields) { try { if ("updateUserId".equals(field.getName())) { if (userEntity != null) { field.setAccessible(true); field.set(parameter, userEntity.getId()); field.setAccessible(false); } } if ("updateTime".equals(field.getName())) { field.setAccessible(true); field.set(parameter, new Date()); field.setAccessible(false); } } catch (Exception e) { e.printStackTrace(); } } } return invocation.proceed(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?