|
@@ -28,57 +28,57 @@ public class DefaultSqlParamBuilder {
|
|
|
private static DefaultSqlParamBuilder instance = new DefaultSqlParamBuilder();
|
|
|
|
|
|
public DefaultSqlParamBuilder() {
|
|
|
- mapperMap.put(TermType.eq, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " = ", "#{", paramKey, "}").toString()
|
|
|
+ mapperMap.put(TermType.eq, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " = ", "#{", paramKey, "}").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.not, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " != ", "#{", paramKey, "}").toString()
|
|
|
+ mapperMap.put(TermType.not, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " != ", "#{", paramKey, "}").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.like, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " like ", "#{", paramKey, "}").toString()
|
|
|
+ mapperMap.put(TermType.like, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " like ", "#{", paramKey, "}").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.notlike, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " not like ", "#{", paramKey, "}").toString()
|
|
|
+ mapperMap.put(TermType.notlike, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " not like ", "#{", paramKey, "}").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.notnull, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " is not null").toString()
|
|
|
+ mapperMap.put(TermType.notnull, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " is not null").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.isnull, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " is null").toString()
|
|
|
+ mapperMap.put(TermType.isnull, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " is null").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.empty, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " =''").toString()
|
|
|
+ mapperMap.put(TermType.empty, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " =''").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.notempty, (paramKey, field, jdbcType) ->
|
|
|
- new SqlAppender().add(field.getField(), " !=''").toString()
|
|
|
+ mapperMap.put(TermType.notempty, (paramKey, tableName, field, jdbcType) ->
|
|
|
+ new SqlAppender().add(tableName, ".", field.getField(), " !=''").toString()
|
|
|
);
|
|
|
- mapperMap.put(TermType.btw, (paramKey, field, jdbcType) ->
|
|
|
+ mapperMap.put(TermType.btw, (paramKey, tableName, field, jdbcType) ->
|
|
|
{
|
|
|
SqlAppender sqlAppender = new SqlAppender();
|
|
|
List<Object> objects = param2list(field.getValue());
|
|
|
if (objects.size() == 1)
|
|
|
objects.add(objects.get(0));
|
|
|
field.setValue(objects);
|
|
|
- sqlAppender.addSpc(field.getField(), "between")
|
|
|
+ sqlAppender.add(tableName, ".", field.getField()," ").addSpc("between")
|
|
|
.add(" #{", paramKey, "[0]}")
|
|
|
.add(" and ", "#{", paramKey, "[1]}");
|
|
|
return sqlAppender.toString();
|
|
|
});
|
|
|
|
|
|
- mapperMap.put(TermType.notbtw, (paramKey, field, jdbcType) ->
|
|
|
+ mapperMap.put(TermType.notbtw, (paramKey, tableName, field, jdbcType) ->
|
|
|
{
|
|
|
SqlAppender sqlAppender = new SqlAppender();
|
|
|
List<Object> objects = param2list(field.getValue());
|
|
|
if (objects.size() == 1)
|
|
|
objects.add(objects.get(0));
|
|
|
field.setValue(objects);
|
|
|
- sqlAppender.addSpc(field.getField(), "not between")
|
|
|
+ sqlAppender.add(tableName, ".", field.getField()," ").addSpc("not between")
|
|
|
.add(" #{", paramKey, "[0]}")
|
|
|
.add(" and ", "#{", paramKey, "[1]}");
|
|
|
return sqlAppender.toString();
|
|
|
});
|
|
|
|
|
|
- mapperMap.put(TermType.gt, (paramKey, field, jdbcType) -> {
|
|
|
+ mapperMap.put(TermType.gt, (paramKey, tableName, field, jdbcType) -> {
|
|
|
SqlAppender sqlAppender = new SqlAppender();
|
|
|
if (Arrays.<JDBCType>asList(JDBCType.DATE, JDBCType.TIME, JDBCType.TIMESTAMP).contains(jdbcType)) {
|
|
|
if (!(field.getValue() instanceof Date)) {
|
|
@@ -87,11 +87,11 @@ public class DefaultSqlParamBuilder {
|
|
|
if (date != null) field.setValue(date);
|
|
|
}
|
|
|
}
|
|
|
- sqlAppender.add(field.getField(), " >= #{", paramKey, "}");
|
|
|
+ sqlAppender.add(tableName, ".", field.getField(), " >= #{", paramKey, "}");
|
|
|
return sqlAppender.toString();
|
|
|
});
|
|
|
|
|
|
- mapperMap.put(TermType.lt, (paramKey, field, jdbcType) -> {
|
|
|
+ mapperMap.put(TermType.lt, (paramKey, tableName, field, jdbcType) -> {
|
|
|
SqlAppender sqlAppender = new SqlAppender();
|
|
|
if (Arrays.<JDBCType>asList(JDBCType.DATE, JDBCType.TIME, JDBCType.TIMESTAMP).contains(jdbcType)) {
|
|
|
if (!(field.getValue() instanceof Date)) {
|
|
@@ -100,15 +100,15 @@ public class DefaultSqlParamBuilder {
|
|
|
if (date != null) field.setValue(date);
|
|
|
}
|
|
|
}
|
|
|
- sqlAppender.add(field.getField(), " <= #{", paramKey, "}");
|
|
|
+ sqlAppender.add(tableName, ".",field.getField(), " <= #{", paramKey, "}");
|
|
|
return sqlAppender.toString();
|
|
|
});
|
|
|
|
|
|
- mapperMap.put(TermType.in, (paramKey, field, jdbcType) -> {
|
|
|
+ mapperMap.put(TermType.in, (paramKey, tableName, field, jdbcType) -> {
|
|
|
List<Object> values = param2list(field.getValue());
|
|
|
field.setValue(values);
|
|
|
SqlAppender appender = new SqlAppender();
|
|
|
- appender.addSpc(field.getField(), "in(");
|
|
|
+ appender.add(tableName, ".").addSpc(field.getField(), "in(");
|
|
|
for (int i = 0; i < values.size(); i++) {
|
|
|
appender.add("#{", paramKey, "[", i, "]}", ",");
|
|
|
}
|
|
@@ -117,11 +117,11 @@ public class DefaultSqlParamBuilder {
|
|
|
return appender.toString();
|
|
|
});
|
|
|
|
|
|
- mapperMap.put(TermType.notin, (paramKey, field, jdbcType) -> {
|
|
|
+ mapperMap.put(TermType.notin, (paramKey, tableName, field, jdbcType) -> {
|
|
|
List<Object> values = param2list(field.getValue());
|
|
|
field.setValue(values);
|
|
|
SqlAppender appender = new SqlAppender();
|
|
|
- appender.addSpc(field.getField(), "not in(");
|
|
|
+ appender.add(tableName, ".").addSpc(field.getField(), "not in(");
|
|
|
for (int i = 0; i < values.size(); i++) {
|
|
|
appender.add("#{", paramKey, "[", i, "]}", ",");
|
|
|
}
|
|
@@ -140,15 +140,15 @@ public class DefaultSqlParamBuilder {
|
|
|
return mapperMap.get(type);
|
|
|
}
|
|
|
|
|
|
- public String buildWhere(Map<String, Object> fieldConfig, List<Term> terms) {
|
|
|
+ public String buildWhere(Map<String, Object> fieldConfig, String tableName, List<Term> terms) {
|
|
|
SqlAppender sqlAppender = new SqlAppender();
|
|
|
- buildWhere(fieldConfig, "", terms, sqlAppender);
|
|
|
+ buildWhere(fieldConfig, "", tableName, terms, sqlAppender);
|
|
|
if (sqlAppender.size() > 0) sqlAppender.removeFirst();
|
|
|
return sqlAppender.toString();
|
|
|
}
|
|
|
|
|
|
- public String buildSelectFields(Map<String, Object> fieldConfig, SqlParam param) {
|
|
|
- if(param==null)return "*";
|
|
|
+ public String buildSelectFields(Map<String, Object> fieldConfig, String tableName, SqlParam param) {
|
|
|
+ if (param == null) return "*";
|
|
|
Set<String> includes = param.getIncludes(),
|
|
|
excludes = param.getExcludes();
|
|
|
boolean includesIsEmpty = includes.isEmpty(),
|
|
@@ -160,7 +160,7 @@ public class DefaultSqlParamBuilder {
|
|
|
propertyMapper.forEach((k, v) -> {
|
|
|
if (!appender.isEmpty())
|
|
|
appender.add(",");
|
|
|
- appender.add(k, " as ").addEdSpc(getQuoteStart(), k, getQuoteEnd());
|
|
|
+ appender.add(tableName, ".", k, " as ").addEdSpc(getQuoteStart(), k, getQuoteEnd());
|
|
|
});
|
|
|
if (appender.isEmpty()) return "*";
|
|
|
return appender.toString();
|
|
@@ -175,7 +175,19 @@ public class DefaultSqlParamBuilder {
|
|
|
if (obj != null) {
|
|
|
if (!appender.isEmpty())
|
|
|
appender.add(",");
|
|
|
- appender.add(k, "=", "#{data.", v, "}");
|
|
|
+ Map<String, Object> config = ((Map) fieldConfig.get(k));
|
|
|
+ appender.add(k, "=", "#{data.", v);
|
|
|
+ if (config != null) {
|
|
|
+ Object jdbcType = config.get("jdbcType"),
|
|
|
+ javaType = config.get("javaType");
|
|
|
+ if (jdbcType != null) {
|
|
|
+ appender.add(",jdbcType=", jdbcType);
|
|
|
+ }
|
|
|
+ if (javaType != null) {
|
|
|
+ appender.add(",javaType=", javaType);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ appender.add("}");
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
}
|
|
@@ -226,9 +238,16 @@ public class DefaultSqlParamBuilder {
|
|
|
propertyMapper.put(k, fieldName);
|
|
|
return;
|
|
|
}
|
|
|
- if (includes.contains(fieldName) || includes.contains(k)) {
|
|
|
+ if (excludes.contains(fieldName) || excludes.contains(k)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (includesIsEmpty) {
|
|
|
+ propertyMapper.put(k, fieldName);
|
|
|
+ } else if (includes.contains(fieldName) || includes.contains(k)) {
|
|
|
propertyMapper.put(k, fieldName);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
});
|
|
|
return propertyMapper;
|
|
|
}
|
|
@@ -259,7 +278,7 @@ public class DefaultSqlParamBuilder {
|
|
|
return name;
|
|
|
}
|
|
|
|
|
|
- public void buildWhere(Map<String, Object> fieldConfig, String prefix, List<Term> terms, SqlAppender appender) {
|
|
|
+ public void buildWhere(Map<String, Object> fieldConfig, String prefix, String tableName, List<Term> terms, SqlAppender appender) {
|
|
|
if (terms == null || terms.isEmpty()) return;
|
|
|
int index = 0;
|
|
|
String prefixTmp = StringUtils.concat(prefix, StringUtils.isNullOrEmpty(prefix) ? "" : ".");
|
|
@@ -284,7 +303,7 @@ public class DefaultSqlParamBuilder {
|
|
|
if (!term.getTerms().isEmpty()) {
|
|
|
//构建嵌套的条件
|
|
|
SqlAppender nest = new SqlAppender();
|
|
|
- buildWhere(fieldConfig, prefix, term.getTerms(), nest);
|
|
|
+ buildWhere(fieldConfig, prefix, tableName, term.getTerms(), nest);
|
|
|
//如果嵌套结果为空
|
|
|
if (nest.isEmpty()) {
|
|
|
appender.removeLast();//删除最后一个(and 或者 or)
|
|
@@ -296,12 +315,12 @@ public class DefaultSqlParamBuilder {
|
|
|
}
|
|
|
appender.add("(");
|
|
|
if (!nullTerm)
|
|
|
- appender.add(mapperMap.get(term.getTermType()).fieldMapper(prefix + ".value", term, jdbcType));
|
|
|
+ appender.add(mapperMap.get(term.getTermType()).fieldMapper(prefix + ".value", tableName, term, jdbcType));
|
|
|
appender.addAll(nest);
|
|
|
appender.add(")");
|
|
|
} else {
|
|
|
if (!nullTerm)
|
|
|
- appender.add(mapperMap.get(term.getTermType()).fieldMapper("" + prefix + ".value", term, jdbcType));
|
|
|
+ appender.add(mapperMap.get(term.getTermType()).fieldMapper("" + prefix + ".value", tableName, term, jdbcType));
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -350,12 +369,7 @@ public class DefaultSqlParamBuilder {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
|
|
|
- public void test(Object data){
|
|
|
-
|
|
|
- System.out.println(data);
|
|
|
- }
|
|
|
-
|
|
|
public interface KeyWordMapper {
|
|
|
- String fieldMapper(String paramKey, Term term, JDBCType jdbcType);
|
|
|
+ String fieldMapper(String paramKey, String tableName, Term term, JDBCType jdbcType);
|
|
|
}
|
|
|
}
|