Commit 452da19b authored by 雍欢's avatar 雍欢

DefaultSqlTranslator不缓存解析生成的SQL

parent bfb705b0
......@@ -6,9 +6,7 @@ import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.Arrays;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;
/**
......@@ -16,21 +14,8 @@ import java.util.stream.Collectors;
*/
public class DefaultSqlTranslator implements SqlTranslator {
private final Map<String, String> sqlCache = new ConcurrentHashMap<>(200);
@Override
public String translate(String sql, Method method, Object[] args) {
final String cacheKey = method.getDeclaringClass().getName() + "." + method.getName();
String cachedSql = sqlCache.get(cacheKey);
if (cachedSql != null) {
return cachedSql;
}
sql = translateInternal(sql, method, args);
sqlCache.put(cacheKey, sql);
return sql;
}
private String translateInternal(String sql, Method method, Object[] args) {
if (useNamedParameter(method, args)) {
Parameter[] parameters = method.getParameters();
for (int i = 0; i < parameters.length; i++) {
......@@ -48,6 +33,8 @@ public class DefaultSqlTranslator implements SqlTranslator {
}
}
}
// 不要试图缓存解析生成SQL,即使是同一个源SQL,不同的参数(args)也会解析生成不同的SQL
// 例如有如下SQL:select t.id,t.name from t where t.id in(:ids),ids的长度不同,替换生成占位符(?)个数也会不同
return sql;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment