From c3cc56f9c4ad90d873bec74312d75c7a46bdd705 Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sat, 13 Jan 2024 15:46:48 +0800 Subject: [PATCH 1/3] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE-SQL=E7=9B=91=E6=8E=A7=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1068036230971392]系统配置-SQL监控优化 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1068036230971392 --- .../framework/dao/plugin/CompressHandler.java | 11 +++++++--- .../framework/dao/plugin/Md5Handler.java | 21 ++++++++++++------- .../dao/plugin/NeatLogicTypeHandler.java | 6 ++++++ .../dao/plugin/SqlCostInterceptor.java | 14 ++++++++++++- 4 files changed, 41 insertions(+), 11 deletions(-) create mode 100644 src/main/java/neatlogic/framework/dao/plugin/NeatLogicTypeHandler.java diff --git a/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java b/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java index 67603f3e4..156221e91 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java +++ b/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java @@ -27,15 +27,21 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -public class CompressHandler implements TypeHandler { +public class CompressHandler implements TypeHandler, NeatLogicTypeHandler { @Override public void setParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { + + ps.setString(i, handleParameter(parameter)); + } + + @Override + public String handleParameter(String parameter) { int maxLength = 32000; if (Config.ENABLE_GZIP() && StringUtils.isNotBlank(parameter) && parameter.length() > maxLength) { parameter = "GZIP:" + GzipUtil.compress(parameter); } - ps.setString(i, parameter); + return parameter; } @@ -65,5 +71,4 @@ public class CompressHandler implements TypeHandler { } return v; } - } diff --git a/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java b/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java index 6908a0b83..abe1e2143 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java +++ b/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java @@ -20,24 +20,25 @@ import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.TypeHandler; import org.springframework.util.DigestUtils; -import java.sql.CallableStatement; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.sql.*; import java.util.Locale; -public class Md5Handler implements TypeHandler { +public class Md5Handler implements TypeHandler, NeatLogicTypeHandler { @Override public void setParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { + ps.setObject(i, handleParameter(parameter)); + } + + @Override + public Object handleParameter(Object parameter) { if (parameter != null) { String parameterStr = parameter.toString().toLowerCase(Locale.ROOT); parameter = DigestUtils.md5DigestAsHex(parameterStr.getBytes()); } - ps.setObject(i, parameter); + return parameter; } - @Override public String getResult(ResultSet rs, String columnName) throws SQLException { return rs.getString(columnName); @@ -53,4 +54,10 @@ public class Md5Handler implements TypeHandler { return cs.getString(columnIndex); } + public static void main(String[] args) { + String parameter = "XX集团"; + String parameterStr = parameter.toString().toLowerCase(Locale.ROOT); + parameter = DigestUtils.md5DigestAsHex(parameterStr.getBytes()); + System.out.println("parameter = " + parameter); + } } diff --git a/src/main/java/neatlogic/framework/dao/plugin/NeatLogicTypeHandler.java b/src/main/java/neatlogic/framework/dao/plugin/NeatLogicTypeHandler.java new file mode 100644 index 000000000..d44a42ce2 --- /dev/null +++ b/src/main/java/neatlogic/framework/dao/plugin/NeatLogicTypeHandler.java @@ -0,0 +1,6 @@ +package neatlogic.framework.dao.plugin; + +public interface NeatLogicTypeHandler { + + Object handleParameter(T parameter); +} diff --git a/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java b/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java index 70be64f66..5ec076798 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java +++ b/src/main/java/neatlogic/framework/dao/plugin/SqlCostInterceptor.java @@ -32,6 +32,7 @@ import org.apache.ibatis.reflection.MetaObject; import org.apache.ibatis.session.Configuration; import org.apache.ibatis.session.ResultHandler; import org.apache.ibatis.session.RowBounds; +import org.apache.ibatis.type.TypeHandler; import org.apache.ibatis.type.TypeHandlerRegistry; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -151,7 +152,11 @@ public class SqlCostInterceptor implements Interceptor { // 封装了一下sql语句,使得结果返回完整xml路径下的sql语句节点id + sql语句 private static String getSql(Configuration configuration, BoundSql boundSql, String sqlId) { - return showSql(configuration, boundSql); + String sql = showSql(configuration, boundSql); + if (sql.contains("@{DATA_SCHEMA}")) { + sql = sql.replace("@{DATA_SCHEMA}", TenantContext.get().getDataDbName()); + } + return sql; } // 如果参数是String,则添加单引号, 如果是日期,则转换为时间格式器并加单引号; 对参数是null和不是null的情况作了处理 @@ -192,12 +197,19 @@ public class SqlCostInterceptor implements Interceptor { MetaObject metaObject = configuration.newMetaObject(parameterObject); for (ParameterMapping parameterMapping : parameterMappings) { String propertyName = parameterMapping.getProperty(); + TypeHandler typeHandler = parameterMapping.getTypeHandler(); if (metaObject.hasGetter(propertyName)) { Object obj = metaObject.getValue(propertyName); + if (obj != null && typeHandler != null && typeHandler instanceof NeatLogicTypeHandler) { + obj = ((NeatLogicTypeHandler) typeHandler).handleParameter(obj); + } sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj))); } else if (boundSql.hasAdditionalParameter(propertyName)) { // 该分支是动态sql Object obj = boundSql.getAdditionalParameter(propertyName); + if (obj != null && typeHandler != null && typeHandler instanceof NeatLogicTypeHandler) { + obj = ((NeatLogicTypeHandler) typeHandler).handleParameter(obj); + } sql = sql.replaceFirst("\\?", Matcher.quoteReplacement(getParameterValue(obj))); } else { // 打印出缺失,提醒该参数缺失并防止错位 -- Gitee From 2d0d3ba47ff0a785c02fc67622c150d82f42f38c Mon Sep 17 00:00:00 2001 From: linbangquan <1437892690@qq.com> Date: Sat, 13 Jan 2024 15:49:50 +0800 Subject: [PATCH 2/3] =?UTF-8?q?[=E5=8A=9F=E8=83=BD]=20=E7=B3=BB=E7=BB=9F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE-SQL=E7=9B=91=E6=8E=A7=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 关联 #[1068036230971392]系统配置-SQL监控优化 http://192.168.0.96:8090/demo/rdm.html#/story-detail/939050947543040/939050947543042/1068036230971392 --- .../java/neatlogic/framework/dao/plugin/Md5Handler.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java b/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java index abe1e2143..7bee9798e 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java +++ b/src/main/java/neatlogic/framework/dao/plugin/Md5Handler.java @@ -53,11 +53,4 @@ public class Md5Handler implements TypeHandler, NeatLogicTypeHandler