|
@@ -26,13 +26,15 @@ public class SqlProvider {
|
|
|
Sql<?> sql = (Sql<?>) paramMap.get(ISqlRunner.SQL);
|
|
|
try {
|
|
|
|
|
|
- // 初始化sql上下文
|
|
|
+ // 初始化sql上下文数据
|
|
|
SqlContext.init(paramMap);
|
|
|
|
|
|
+ // 没有union返回sql
|
|
|
if (sql.unionList.isEmpty()) {
|
|
|
return toSqlStr(sql);
|
|
|
}
|
|
|
|
|
|
+ // 拼接union sql语句
|
|
|
StringBuilder sqlSb = new StringBuilder();
|
|
|
sql.unionList.forEach(itemSql -> appendSql(sqlSb, itemSql));
|
|
|
appendSql(sqlSb, sql);
|
|
@@ -42,9 +44,13 @@ public class SqlProvider {
|
|
|
|
|
|
// 清空sql上下文数据
|
|
|
SqlContext.remove();
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 拼接sql union
|
|
|
+ */
|
|
|
private static void appendSql(StringBuilder sqlSb, Sql<?> sql) {
|
|
|
sqlSb.append(sql.unionType)
|
|
|
.append(StringPool.LEFT_BRACKET)
|
|
@@ -52,6 +58,9 @@ public class SqlProvider {
|
|
|
.append(StringPool.RIGHT_BRACKET);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * sql对象转化为字符串
|
|
|
+ */
|
|
|
private static String toSqlStr(Sql<?> sql) {
|
|
|
|
|
|
// 设置表别名
|
|
@@ -105,32 +114,40 @@ public class SqlProvider {
|
|
|
List<QueryColumn> groupByList = sql.groupByList;
|
|
|
List<QueryConditionOrder> orderByList = sql.orderByList;
|
|
|
|
|
|
+ // select fields from table join table on
|
|
|
StringBuilder sqlBuilder = new StringBuilder()
|
|
|
.append(SqlConstant.SELECT)
|
|
|
.append(listFormatSql(queryFieldsList, StringPool.COMMA))
|
|
|
.append(SqlConstant.FROM)
|
|
|
.append(getQueryTablesSql(queryTableList));
|
|
|
|
|
|
+ // where 条件
|
|
|
String where = listFormatSql(queryConditionList, SqlConstant.AND);
|
|
|
if (StrUtil.isNotBlank(where)) {
|
|
|
sqlBuilder.append(SqlConstant.WHERE).append(where);
|
|
|
}
|
|
|
|
|
|
+ // groupBy 条件
|
|
|
String groupBy = listFormatSql(groupByList, StringPool.COMMA);
|
|
|
if (StrUtil.isNotBlank(groupBy)) {
|
|
|
sqlBuilder.append(SqlConstant.GROUP_BY).append(groupBy);
|
|
|
}
|
|
|
|
|
|
+ // orderBy 条件
|
|
|
String orderBy = listFormatSql(orderByList, StringPool.COMMA);
|
|
|
if (StrUtil.isNotBlank(orderBy)) {
|
|
|
sqlBuilder.append(SqlConstant.ORDER_BY).append(orderBy);
|
|
|
}
|
|
|
|
|
|
+ // limit 条件
|
|
|
sqlBuilder.append(sql.limit);
|
|
|
|
|
|
return sqlBuilder.toString();
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取查询表sql
|
|
|
+ */
|
|
|
private static String getQueryTablesSql(List<ITable> queryTableList) {
|
|
|
|
|
|
String from = queryTableList.stream()
|
|
@@ -146,6 +163,9 @@ public class SqlProvider {
|
|
|
return from + join;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 拼接sql片段
|
|
|
+ */
|
|
|
private static String listFormatSql(List<? extends IFormat> list, String joinStr) {
|
|
|
return list.stream()
|
|
|
.filter(Objects::nonNull)
|