From 0928200f9ca991957f129cc9c1a77c025f4186d0 Mon Sep 17 00:00:00 2001
From: Helius <wangdoubleone@gmail.com>
Date: Thu, 14 May 2020 17:31:14 +0800
Subject: [PATCH] add sql log and mybatis interceptor
---
src/main/java/com/xcong/excoin/modules/test/controller/TestUserController.java | 13 ++++++
src/main/resources/logback-spring.xml | 11 +++++
src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java | 13 ++++--
src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java | 80 +++++++++++++++------------------------
4 files changed, 62 insertions(+), 55 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 9203353..144a8c0 100644
--- a/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java
+++ b/src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java
@@ -1,12 +1,14 @@
package com.xcong.excoin.configurations.interceptor;
import com.xcong.excoin.common.LoginUserUtils;
+import com.xcong.excoin.common.system.base.BaseEntity;
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.apache.ibatis.session.defaults.DefaultSqlSession;
import org.springframework.stereotype.Component;
import java.lang.reflect.Field;
@@ -19,7 +21,7 @@
* @date 2020-05-13
**/
@Slf4j
-//@Component
+@Component
@Intercepts({ @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})})
public class MybatisInterceptor implements Interceptor {
@Override
@@ -35,33 +37,27 @@
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 (parameter instanceof DefaultSqlSession.StrictMap) {
+ Map map = (Map) parameter;
+ List list = (List) map.get("list");
+ for (Object o : list) {
+ injectForInsert(o);
}
-
- if ("createTime".equals(field.getName()) || "updateTime".equals(field.getName())) {
- timeField(field, parameter, memberEntity);
- }
+ } else {
+ injectForInsert(parameter);
}
}
if (SqlCommandType.UPDATE == sqlCommandType) {
- Field[] fields = this.getAllFields(parameter);
-
- for (Field field : fields) {
- if ("updateBy".equals(field.getName())) {
- byField(field, parameter, memberEntity);
+ if (parameter instanceof DefaultSqlSession.StrictMap) {
+ Map map = (Map) parameter;
+ List list = (List) map.get("list");
+ for (Object o : list) {
+ injectForUpdate(o);
}
-
- if ("updateTime".equals(field.getName())) {
- timeField(field, parameter, memberEntity);
- }
+ } else {
+ injectForUpdate(parameter);
}
}
@@ -78,37 +74,23 @@
}
- 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);
+ public void injectForInsert(Object o) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ if (o instanceof BaseEntity) {
+ BaseEntity baseEntity = (BaseEntity) o;
+ baseEntity.setCreateBy(member.getUsername());
+ baseEntity.setUpdateBy(member.getUsername());
+ baseEntity.setCreateTime(new Date());
+ baseEntity.setUpdateTime(new Date());
}
}
- 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);
+ public void injectForUpdate(Object o) {
+ MemberEntity member = LoginUserUtils.getAppLoginUser();
+ if (o instanceof BaseEntity) {
+ BaseEntity baseEntity = (BaseEntity) o;
+ baseEntity.setUpdateBy(member.getUsername());
+ baseEntity.setUpdateTime(new Date());
}
}
}
diff --git a/src/main/java/com/xcong/excoin/modules/test/controller/TestUserController.java b/src/main/java/com/xcong/excoin/modules/test/controller/TestUserController.java
index 222910a..fd2db94 100644
--- a/src/main/java/com/xcong/excoin/modules/test/controller/TestUserController.java
+++ b/src/main/java/com/xcong/excoin/modules/test/controller/TestUserController.java
@@ -63,6 +63,19 @@
return Result.fail("fail");
}
+ @ApiOperation(value = "修改测试用户", notes = "该接口用户修改测试用户")
+ @PostMapping(value = "/modify")
+ public Result modify(@RequestBody @Validated TestUserDto testUserDto) {
+ TestUserEntity testUserEntity = TestUserEntityMapper.INSTANCE.dtoToEntity(testUserDto);
+ log.info("#-------->{}#", testUserEntity);
+ boolean flag = testUserService.updateById(testUserEntity);
+ if (flag) {
+ return Result.ok("success");
+ }
+ return Result.fail("fail");
+ }
+
+
@ApiOperation(value = "根据ID删除用户", notes = "根据ID删除用户")
@GetMapping(value = "/del/{id}")
public Result del(@PathVariable(value = "id") Long id) {
diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml
index efc56f9..63b057d 100644
--- a/src/main/resources/logback-spring.xml
+++ b/src/main/resources/logback-spring.xml
@@ -16,7 +16,7 @@
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>info</level>
+ <level>debug</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
@@ -137,6 +137,15 @@
<logger name="com.xcong.excoin" level="debug"/>
</springProfile>
+ <!-- mybatis日志打印-->
+ <logger name="org.apache.ibatis" level="DEBUG" />
+ <logger name="java.sql" level="DEBUG" />
+
+ <!-- 项目 mapper 路径
+ console控制台显示sql语句:STDOUT.filter.level -> debug级别
+ -->
+ <logger name="com.xcong.excoin" level="DEBUG" />
+
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
diff --git a/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java b/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java
index 5756df4..bc04524 100644
--- a/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java
+++ b/src/test/java/com/xcong/excoin/KssframeworkApplicationTests.java
@@ -2,6 +2,7 @@
import com.xcong.excoin.modules.test.dao.TestUserDao;
import com.xcong.excoin.modules.test.entity.TestUserEntity;
+import com.xcong.excoin.modules.test.service.TestUserService;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@@ -30,18 +31,20 @@
}
+ @Resource
+ TestUserService testUserService;
+
@Test
public void mybatisInterceptorTest() {
TestUserEntity testUser = new TestUserEntity();
- testUser.setCreateBy("123");
- testUser.setCreateTime(new Date());
- testUser.setUpdateBy("123");
- testUser.setUpdateTime(new Date());
+ testUser.setId(3L);
testUser.setAccount("123333345");
testUser.setName("hehe111");
testUser.setPassword("33333");
- testUserDao.insert(testUser);
+ testUserDao.updateById(testUser);
+
}
+
}
--
Gitblit v1.9.1