diff --git a/src/main/java/org/redkale/source/DataNativeSqlParser.java b/src/main/java/org/redkale/source/DataNativeSqlParser.java index ebe57fbc6..9b6b466b8 100644 --- a/src/main/java/org/redkale/source/DataNativeSqlParser.java +++ b/src/main/java/org/redkale/source/DataNativeSqlParser.java @@ -20,7 +20,7 @@ import org.redkale.convert.json.JsonConvert; */ public interface DataNativeSqlParser { - NativeSqlStatement parse(Function signFunc, String dbtype, String nativeSql, Map params); + NativeSqlStatement parse(Function signFunc, String dbtype, String rawSql, Map params); public static class NativeSqlStatement { @@ -30,9 +30,6 @@ public interface DataNativeSqlParser { //根据参数值集合重新生成的带?参数可执行的计算总数sql,用于返回Sheet对象 protected String nativeCountSql; - //是否包含InExpression参数名 - protected boolean existInNamed; - //需要预编译的参数名, 数量与sql中的?数量一致 protected List paramNames; @@ -65,14 +62,6 @@ public interface DataNativeSqlParser { this.nativeCountSql = nativeCountSql; } - public boolean isExistInNamed() { - return existInNamed; - } - - public void setExistInNamed(boolean existInNamed) { - this.existInNamed = existInNamed; - } - public List getParamNames() { return paramNames; } diff --git a/src/main/java/org/redkale/util/Attribute.java b/src/main/java/org/redkale/util/Attribute.java index 25635dbe1..a737065fb 100644 --- a/src/main/java/org/redkale/util/Attribute.java +++ b/src/main/java/org/redkale/util/Attribute.java @@ -228,6 +228,9 @@ public interface Attribute { * @return Attribute对象 */ public static Attribute create(Class clazz, final String fieldName) { + if (Map.class.isAssignableFrom(clazz)) { + return (Attribute) map(fieldName); + } try { return create(clazz, fieldName, (Class) null, clazz.getDeclaredField(fieldName), (java.lang.reflect.Method) null, (java.lang.reflect.Method) null, null); } catch (NoSuchFieldException | SecurityException ex) { @@ -1161,4 +1164,40 @@ public interface Attribute { } }; } + + /** + * 根据Map类生成 Attribute 对象。 fieldName都不能为null + * + * @param fieldName 字段名 + * + * @return Attribute对象 + */ + public static Attribute map(final String fieldName) { + return new Attribute() { + @Override + public Class type() { + return (Class) Object.class; + } + + @Override + public Class declaringClass() { + return (Class) Map.class; + } + + @Override + public String field() { + return fieldName; + } + + @Override + public F get(T obj) { + return (F) ((Map) obj).get(fieldName); + } + + @Override + public void set(T obj, F value) { + ((Map) obj).put(fieldName, value); + } + }; + } }