diff --git a/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java b/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java index 67603f3e49497a591b8ee5f0f215c48eef4a6959..29805e17649554c8966ea7ede3b1c31d98b2c38f 100644 --- a/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java +++ b/src/main/java/neatlogic/framework/dao/plugin/CompressHandler.java @@ -27,15 +27,20 @@ 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 +70,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 6908a0b837a4b67d947a5b86cc4cd975ed8d3c2e..7bee9798e07ee90f4959e3f1c2b269f07223a2f5 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); @@ -52,5 +53,4 @@ public class Md5Handler implements TypeHandler { public String getResult(CallableStatement cs, int columnIndex) throws SQLException { return cs.getString(columnIndex); } - } 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 0000000000000000000000000000000000000000..d44a42ce268de33574f8a0b7e7dc861862c378cd --- /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 70be64f663d1363f5f5ebc05f82637099bd18d72..5ec076798b7fa3e4a98892b66ecd6e55b4695636 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 { // 打印出缺失,提醒该参数缺失并防止错位