From 5a57e1438d4682d041933d88fbfa37cbc2e77919 Mon Sep 17 00:00:00 2001 From: Helius <wangdoubleone@gmail.com> Date: Thu, 14 May 2020 15:40:25 +0800 Subject: [PATCH] modify --- src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java | 106 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 105 insertions(+), 1 deletions(-) diff --git a/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java b/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java index 08aa177..9203353 100644 --- a/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java +++ b/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java @@ -1,10 +1,114 @@ package com.xcong.excoin.configurations.interceptor; +import com.xcong.excoin.common.LoginUserUtils; +import com.xcong.excoin.modules.member.entity.MemberEntity; +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.*; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Field; +import java.util.*; + /** * mybatis拦截器,自动注入创建人、创建时间、修改人、修改时间 * * @author wzy * @date 2020-05-13 **/ -public class MybatisInterceptor { +@Slf4j +//@Component +@Intercepts({ @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})}) +public class MybatisInterceptor implements Interceptor { + @Override + public Object intercept(Invocation invocation) throws Throwable { + MappedStatement mappedStatement = (MappedStatement) invocation.getArgs()[0]; + String sqlId = mappedStatement.getId(); + log.info("----sqlId----" + sqlId); + SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); + log.info("-------------->{}", sqlCommandType); + + Object parameter = invocation.getArgs()[1]; + if (parameter == null) { + return invocation.proceed(); + } + + MemberEntity memberEntity = LoginUserUtils.getAppLoginUser(); + if (SqlCommandType.INSERT == sqlCommandType) { + Field[] fields = this.getAllFields(parameter); + + for(Field field : fields) { + log.info("----->{}", field.getName()); + if ("createBy".equals(field.getName()) || "updateBy".equals(field.getName())) { + byField(field, parameter, memberEntity); + } + + if ("createTime".equals(field.getName()) || "updateTime".equals(field.getName())) { + timeField(field, parameter, memberEntity); + } + } + } + + if (SqlCommandType.UPDATE == sqlCommandType) { + Field[] fields = this.getAllFields(parameter); + + for (Field field : fields) { + if ("updateBy".equals(field.getName())) { + byField(field, parameter, memberEntity); + } + + if ("updateTime".equals(field.getName())) { + timeField(field, parameter, memberEntity); + } + } + } + + return invocation.proceed(); + } + + @Override + public Object plugin(Object o) { + return Plugin.wrap(o, this); + } + + @Override + public void setProperties(Properties properties) { + + } + + private Field[] getAllFields(Object object) { + Class<?> clazz = object.getClass(); + List<Field> fieldList = new ArrayList<>(); + while (clazz != null) { + fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields()))); + clazz = clazz.getSuperclass(); + } + Field[] fields = new Field[fieldList.size()]; + fieldList.toArray(fields); + return fields; + } + + private void byField(Field field, Object parameter, MemberEntity memberEntity) throws IllegalAccessException { + field.setAccessible(true); + Object local = field.get(parameter); + field.setAccessible(false); + if (local != null) { + field.setAccessible(true); + field.set(parameter, memberEntity.getUsername()); + field.setAccessible(false); + } + } + + private void timeField(Field field, Object parameter, MemberEntity memberEntity) throws IllegalAccessException { + field.setAccessible(true); + Object local_createBy = field.get(parameter); + field.setAccessible(false); + if (local_createBy != null) { + field.setAccessible(true); + field.set(parameter, new Date()); + field.setAccessible(false); + } + } } -- Gitblit v1.9.1