mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-08 09:38:26 +08:00
Merge remote-tracking branch 'origin/main'
# Conflicts: # mybatis-flex-core/src/main/java/com/mybatisflex/core/constant/SqlConsts.java
This commit is contained in:
commit
64cd2d3781
@ -28,7 +28,6 @@ public final class SqlConsts {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// === 常用符号 ===
|
// === 常用符号 ===
|
||||||
|
|
||||||
public static final String EMPTY = "";
|
public static final String EMPTY = "";
|
||||||
public static final String BLANK = " ";
|
public static final String BLANK = " ";
|
||||||
public static final String ASTERISK = "*";
|
public static final String ASTERISK = "*";
|
||||||
@ -38,14 +37,13 @@ public final class SqlConsts {
|
|||||||
public static final String PLACEHOLDER = "?";
|
public static final String PLACEHOLDER = "?";
|
||||||
public static final String PERCENT_SIGN = "%";
|
public static final String PERCENT_SIGN = "%";
|
||||||
public static final String SINGLE_QUOTE = "'";
|
public static final String SINGLE_QUOTE = "'";
|
||||||
public static final String LEFT_BRACKET = "(";
|
public static final String BRACKET_LEFT = "(";
|
||||||
public static final String RIGHT_BRACKET = ")";
|
public static final String BRACKET_RIGHT = ")";
|
||||||
|
|
||||||
// === SQL 关键字 ===
|
|
||||||
|
|
||||||
public static final String HINT_START = "/*+ ";
|
public static final String HINT_START = "/*+ ";
|
||||||
public static final String HINT_END = " */ ";
|
public static final String HINT_END = " */ ";
|
||||||
|
|
||||||
|
|
||||||
|
// === SQL 关键字 ===
|
||||||
public static final String AS = " AS ";
|
public static final String AS = " AS ";
|
||||||
public static final String OR = " OR ";
|
public static final String OR = " OR ";
|
||||||
public static final String END = " END";
|
public static final String END = " END";
|
||||||
@ -56,9 +54,7 @@ public final class SqlConsts {
|
|||||||
public static final String THEN = " THEN ";
|
public static final String THEN = " THEN ";
|
||||||
public static final String ELSE = " ELSE ";
|
public static final String ELSE = " ELSE ";
|
||||||
public static final String FROM = " FROM ";
|
public static final String FROM = " FROM ";
|
||||||
public static final String INTO = " INTO ";
|
|
||||||
public static final String WHERE = " WHERE ";
|
public static final String WHERE = " WHERE ";
|
||||||
public static final String INSERT = "INSERT";
|
|
||||||
public static final String SELECT = "SELECT ";
|
public static final String SELECT = "SELECT ";
|
||||||
public static final String VALUES = " VALUES ";
|
public static final String VALUES = " VALUES ";
|
||||||
public static final String DELETE = "DELETE";
|
public static final String DELETE = "DELETE";
|
||||||
@ -67,15 +63,19 @@ public final class SqlConsts {
|
|||||||
public static final String DISTINCT = "DISTINCT ";
|
public static final String DISTINCT = "DISTINCT ";
|
||||||
public static final String GROUP_BY = " GROUP BY ";
|
public static final String GROUP_BY = " GROUP BY ";
|
||||||
public static final String ORDER_BY = " ORDER BY ";
|
public static final String ORDER_BY = " ORDER BY ";
|
||||||
|
public static final String INSERT = "INSERT";
|
||||||
|
public static final String INTO = " INTO ";
|
||||||
public static final String INSERT_INTO = INSERT + INTO;
|
public static final String INSERT_INTO = INSERT + INTO;
|
||||||
public static final String DELETE_FROM = DELETE + FROM;
|
public static final String DELETE_FROM = DELETE + FROM;
|
||||||
public static final String SELECT_ALL_FROM = SELECT + ASTERISK + FROM;
|
public static final String SELECT_ALL_FROM = SELECT + ASTERISK + FROM;
|
||||||
|
|
||||||
// === Oracle SQl ===
|
|
||||||
|
|
||||||
|
// === Oracle SQl ===
|
||||||
public static final String INSERT_ALL = "INSERT ALL ";
|
public static final String INSERT_ALL = "INSERT ALL ";
|
||||||
public static final String INSERT_ALL_END = " SELECT 1 FROM DUAL";
|
public static final String INSERT_ALL_END = " SELECT 1 FROM DUAL";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// === Limit Offset ===
|
// === Limit Offset ===
|
||||||
|
|
||||||
public static final String TO = " TO ";
|
public static final String TO = " TO ";
|
||||||
@ -93,7 +93,6 @@ public final class SqlConsts {
|
|||||||
public static final String ROWNUM_RN_FROM = "SELECT * FROM (SELECT TEMP_DATAS.*, ROWNUM RN FROM (";
|
public static final String ROWNUM_RN_FROM = "SELECT * FROM (SELECT TEMP_DATAS.*, ROWNUM RN FROM (";
|
||||||
|
|
||||||
// === 联表查询关键字 ===
|
// === 联表查询关键字 ===
|
||||||
|
|
||||||
public static final String ON = " ON ";
|
public static final String ON = " ON ";
|
||||||
public static final String JOIN = " JOIN ";
|
public static final String JOIN = " JOIN ";
|
||||||
public static final String UNION = " UNION ";
|
public static final String UNION = " UNION ";
|
||||||
@ -104,39 +103,34 @@ public final class SqlConsts {
|
|||||||
public static final String INNER_JOIN = " INNER JOIN ";
|
public static final String INNER_JOIN = " INNER JOIN ";
|
||||||
public static final String CROSS_JOIN = " CROSS JOIN ";
|
public static final String CROSS_JOIN = " CROSS JOIN ";
|
||||||
|
|
||||||
// === 逻辑符号 ===
|
|
||||||
|
|
||||||
|
// === 逻辑符号 ===
|
||||||
public static final String GT = " > ";
|
public static final String GT = " > ";
|
||||||
public static final String GE = " >= ";
|
public static final String GE = " >= ";
|
||||||
public static final String LT = " < ";
|
public static final String LT = " < ";
|
||||||
public static final String LE = " <= ";
|
public static final String LE = " <= ";
|
||||||
public static final String NOT = " NOT ";
|
public static final String NOT = " NOT ";
|
||||||
public static final String LIKE = " LIKE ";
|
public static final String LIKE = " LIKE ";
|
||||||
|
|
||||||
public static final String EQUALS = " = ";
|
public static final String EQUALS = " = ";
|
||||||
public static final String NOT_EQUALS = " != ";
|
public static final String NOT_EQUALS = " != ";
|
||||||
|
|
||||||
public static final String IS_NULL = " IS NULL ";
|
public static final String IS_NULL = " IS NULL ";
|
||||||
public static final String IS_NOT_NULL = " IS NOT NULL ";
|
public static final String IS_NOT_NULL = " IS NOT NULL ";
|
||||||
|
|
||||||
public static final String IN = " IN ";
|
public static final String IN = " IN ";
|
||||||
public static final String NOT_IN = " NOT IN ";
|
public static final String NOT_IN = " NOT IN ";
|
||||||
|
|
||||||
public static final String BETWEEN = " BETWEEN ";
|
public static final String BETWEEN = " BETWEEN ";
|
||||||
public static final String NOT_BETWEEN = " NOT BETWEEN ";
|
public static final String NOT_BETWEEN = " NOT BETWEEN ";
|
||||||
|
|
||||||
public static final String EXISTS = " EXISTS ";
|
public static final String EXISTS = " EXISTS ";
|
||||||
public static final String NOT_EXISTS = " NOT EXISTS ";
|
public static final String NOT_EXISTS = " NOT EXISTS ";
|
||||||
|
|
||||||
// === 排序相关关键字 ===
|
|
||||||
|
|
||||||
|
// === 排序相关关键字 ===
|
||||||
public static final String ASC = " ASC";
|
public static final String ASC = " ASC";
|
||||||
public static final String DESC = " DESC";
|
public static final String DESC = " DESC";
|
||||||
public static final String NULLS_FIRST = " NULLS FIRST";
|
public static final String NULLS_FIRST = " NULLS FIRST";
|
||||||
public static final String NULLS_LAST = " NULLS LAST";
|
public static final String NULLS_LAST = " NULLS LAST";
|
||||||
|
|
||||||
// === SQL 函数名 ===
|
|
||||||
|
|
||||||
|
// === SQL 函数名 ===
|
||||||
public static final String SUM = "SUM";
|
public static final String SUM = "SUM";
|
||||||
public static final String MAX = "MIX";
|
public static final String MAX = "MIX";
|
||||||
public static final String MIN = "MIN";
|
public static final String MIN = "MIN";
|
||||||
@ -147,16 +141,17 @@ public final class SqlConsts {
|
|||||||
public static final String COUNT = "COUNT";
|
public static final String COUNT = "COUNT";
|
||||||
public static final String CONVERT = "CONVERT";
|
public static final String CONVERT = "CONVERT";
|
||||||
|
|
||||||
// === 数学运算符 ===
|
|
||||||
|
|
||||||
|
// === 数学运算符 ===
|
||||||
public static final String PLUS_SIGN = " + ";
|
public static final String PLUS_SIGN = " + ";
|
||||||
|
|
||||||
|
// === 数学运算符 ===
|
||||||
public static final String MINUS_SIGN = " - ";
|
public static final String MINUS_SIGN = " - ";
|
||||||
public static final String DIVISION_SIGN = " / ";
|
public static final String DIVISION_SIGN = " / ";
|
||||||
public static final String MULTIPLICATION_SIGN = " * ";
|
public static final String MULTIPLICATION_SIGN = " * ";
|
||||||
|
public static final String EQUALS_PLACEHOLDER = " = ? ";
|
||||||
|
|
||||||
// === 其他拼接需要的字符串 ===
|
// === 其他拼接需要的字符串 ===
|
||||||
|
|
||||||
public static final String EQUALS_PLACEHOLDER = " = ? ";
|
|
||||||
public static final String AND_PLACEHOLDER = BLANK + PLACEHOLDER + AND + PLACEHOLDER + BLANK;
|
public static final String AND_PLACEHOLDER = BLANK + PLACEHOLDER + AND + PLACEHOLDER + BLANK;
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -91,8 +91,8 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(getRealTable(tableName)));
|
||||||
sql.append(LEFT_BRACKET).append(fields).append(RIGHT_BRACKET);
|
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES).append(LEFT_BRACKET).append(questions).append(RIGHT_BRACKET);
|
sql.append(VALUES).append(BRACKET_LEFT).append(questions).append(BRACKET_RIGHT);
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,9 +127,9 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(getRealTable(tableName)));
|
||||||
sql.append(BLANK).append(LEFT_BRACKET)
|
sql.append(BLANK).append(BRACKET_LEFT)
|
||||||
.append(fields)
|
.append(fields)
|
||||||
.append(RIGHT_BRACKET).append(BLANK);
|
.append(BRACKET_RIGHT).append(BLANK);
|
||||||
sql.append(VALUES).append(questions);
|
sql.append(VALUES).append(questions);
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
}
|
}
|
||||||
@ -170,14 +170,14 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
sql.append(OR);
|
sql.append(OR);
|
||||||
}
|
}
|
||||||
sql.append(LEFT_BRACKET);
|
sql.append(BRACKET_LEFT);
|
||||||
for (int j = 0; j < primaryKeys.length; j++) {
|
for (int j = 0; j < primaryKeys.length; j++) {
|
||||||
if (j > 0) {
|
if (j > 0) {
|
||||||
sql.append(AND);
|
sql.append(AND);
|
||||||
}
|
}
|
||||||
sql.append(wrap(primaryKeys[j])).append(EQUALS_PLACEHOLDER);
|
sql.append(wrap(primaryKeys[j])).append(EQUALS_PLACEHOLDER);
|
||||||
}
|
}
|
||||||
sql.append(RIGHT_BRACKET);
|
sql.append(BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 单主键
|
// 单主键
|
||||||
@ -318,7 +318,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
List<UnionWrapper> unions = CPI.getUnions(queryWrapper);
|
List<UnionWrapper> unions = CPI.getUnions(queryWrapper);
|
||||||
if (CollectionUtil.isNotEmpty(unions)) {
|
if (CollectionUtil.isNotEmpty(unions)) {
|
||||||
sqlBuilder.insert(0, LEFT_BRACKET).append(RIGHT_BRACKET);
|
sqlBuilder.insert(0, BRACKET_LEFT).append(BRACKET_RIGHT);
|
||||||
for (UnionWrapper unionWrapper : unions) {
|
for (UnionWrapper unionWrapper : unions) {
|
||||||
unionWrapper.buildSql(sqlBuilder, this);
|
unionWrapper.buildSql(sqlBuilder, this);
|
||||||
}
|
}
|
||||||
@ -419,9 +419,9 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return sql.append(LEFT_BRACKET).append(sqlFields).append(RIGHT_BRACKET)
|
return sql.append(BRACKET_LEFT).append(sqlFields).append(BRACKET_RIGHT)
|
||||||
.append(VALUES)
|
.append(VALUES)
|
||||||
.append(LEFT_BRACKET).append(sqlValues).append(RIGHT_BRACKET)
|
.append(BRACKET_LEFT).append(sqlValues).append(BRACKET_RIGHT)
|
||||||
.toString();
|
.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -434,14 +434,14 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
for (int i = 0; i < insertColumns.length; i++) {
|
for (int i = 0; i < insertColumns.length; i++) {
|
||||||
warpedInsertColumns[i] = wrap(insertColumns[i]);
|
warpedInsertColumns[i] = wrap(insertColumns[i]);
|
||||||
}
|
}
|
||||||
sql.append(LEFT_BRACKET)
|
sql.append(BRACKET_LEFT)
|
||||||
.append(StringUtil.join(DELIMITER, warpedInsertColumns))
|
.append(StringUtil.join(DELIMITER, warpedInsertColumns))
|
||||||
.append(RIGHT_BRACKET);
|
.append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES);
|
sql.append(VALUES);
|
||||||
|
|
||||||
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
||||||
for (int i = 0; i < entities.size(); i++) {
|
for (int i = 0; i < entities.size(); i++) {
|
||||||
StringJoiner stringJoiner = new StringJoiner(DELIMITER, LEFT_BRACKET, RIGHT_BRACKET);
|
StringJoiner stringJoiner = new StringJoiner(DELIMITER, BRACKET_LEFT, BRACKET_RIGHT);
|
||||||
for (String insertColumn : insertColumns) {
|
for (String insertColumn : insertColumns) {
|
||||||
if (onInsertColumns != null && onInsertColumns.containsKey(insertColumn)) {
|
if (onInsertColumns != null && onInsertColumns.containsKey(insertColumn)) {
|
||||||
//直接读取 onInsert 配置的值,而不用 "?" 代替
|
//直接读取 onInsert 配置的值,而不用 "?" 代替
|
||||||
@ -509,7 +509,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
//多租户
|
//多租户
|
||||||
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
||||||
deleteSQL = deleteSQL.replace(WHERE, WHERE + LEFT_BRACKET) + RIGHT_BRACKET;
|
deleteSQL = deleteSQL.replace(WHERE, WHERE + BRACKET_LEFT) + BRACKET_RIGHT;
|
||||||
deleteSQL += AND + wrap(tableInfo.getTenantIdColumn()) + IN + buildQuestion(tenantIdArgs.length);
|
deleteSQL += AND + wrap(tableInfo.getTenantIdColumn()) + IN + buildQuestion(tenantIdArgs.length);
|
||||||
}
|
}
|
||||||
return deleteSQL;
|
return deleteSQL;
|
||||||
@ -520,7 +520,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
sql.append(tableInfo.getWrapSchemaAndTableName(this));
|
sql.append(tableInfo.getWrapSchemaAndTableName(this));
|
||||||
sql.append(SET).append(wrap(logicDeleteColumn)).append(EQUALS).append(getLogicDeletedValue());
|
sql.append(SET).append(wrap(logicDeleteColumn)).append(EQUALS).append(getLogicDeletedValue());
|
||||||
sql.append(WHERE);
|
sql.append(WHERE);
|
||||||
sql.append(LEFT_BRACKET);
|
sql.append(BRACKET_LEFT);
|
||||||
|
|
||||||
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
||||||
|
|
||||||
@ -530,14 +530,14 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
sql.append(OR);
|
sql.append(OR);
|
||||||
}
|
}
|
||||||
sql.append(LEFT_BRACKET);
|
sql.append(BRACKET_LEFT);
|
||||||
for (int j = 0; j < primaryKeys.length; j++) {
|
for (int j = 0; j < primaryKeys.length; j++) {
|
||||||
if (j > 0) {
|
if (j > 0) {
|
||||||
sql.append(AND);
|
sql.append(AND);
|
||||||
}
|
}
|
||||||
sql.append(wrap(primaryKeys[j])).append(EQUALS_PLACEHOLDER);
|
sql.append(wrap(primaryKeys[j])).append(EQUALS_PLACEHOLDER);
|
||||||
}
|
}
|
||||||
sql.append(RIGHT_BRACKET);
|
sql.append(BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 单主键
|
// 单主键
|
||||||
@ -550,7 +550,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sql.append(RIGHT_BRACKET).append(AND).append(wrap(logicDeleteColumn)).append(EQUALS).append(getLogicNormalValue());
|
sql.append(BRACKET_RIGHT).append(AND).append(wrap(logicDeleteColumn)).append(EQUALS).append(getLogicNormalValue());
|
||||||
|
|
||||||
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
||||||
sql.append(AND).append(wrap(tableInfo.getTenantIdColumn())).append(IN).append(buildQuestion(tenantIdArgs.length));
|
sql.append(AND).append(wrap(tableInfo.getTenantIdColumn())).append(IN).append(buildQuestion(tenantIdArgs.length));
|
||||||
@ -807,7 +807,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
String logicDeleteColumn = tableInfo.getLogicDeleteColumn();
|
String logicDeleteColumn = tableInfo.getLogicDeleteColumn();
|
||||||
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
||||||
if (StringUtil.isNotBlank(logicDeleteColumn) || ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
if (StringUtil.isNotBlank(logicDeleteColumn) || ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
||||||
sql.append(LEFT_BRACKET);
|
sql.append(BRACKET_LEFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
//多主键的场景
|
//多主键的场景
|
||||||
@ -816,14 +816,14 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
sql.append(OR);
|
sql.append(OR);
|
||||||
}
|
}
|
||||||
sql.append(LEFT_BRACKET);
|
sql.append(BRACKET_LEFT);
|
||||||
for (int j = 0; j < primaryKeys.length; j++) {
|
for (int j = 0; j < primaryKeys.length; j++) {
|
||||||
if (j > 0) {
|
if (j > 0) {
|
||||||
sql.append(AND);
|
sql.append(AND);
|
||||||
}
|
}
|
||||||
sql.append(wrap(primaryKeys[j])).append(EQUALS_PLACEHOLDER);
|
sql.append(wrap(primaryKeys[j])).append(EQUALS_PLACEHOLDER);
|
||||||
}
|
}
|
||||||
sql.append(RIGHT_BRACKET);
|
sql.append(BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 单主键
|
// 单主键
|
||||||
@ -837,7 +837,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtil.isNotBlank(logicDeleteColumn) || ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
if (StringUtil.isNotBlank(logicDeleteColumn) || ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
||||||
sql.append(RIGHT_BRACKET);
|
sql.append(BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -932,14 +932,14 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
|
|
||||||
protected String buildQuestion(int count) {
|
protected String buildQuestion(int count) {
|
||||||
StringBuilder sb = new StringBuilder(LEFT_BRACKET);
|
StringBuilder sb = new StringBuilder(BRACKET_LEFT);
|
||||||
for (int i = 0; i < count; i++) {
|
for (int i = 0; i < count; i++) {
|
||||||
sb.append(PLACEHOLDER);
|
sb.append(PLACEHOLDER);
|
||||||
if (i != count - 1) {
|
if (i != count - 1) {
|
||||||
sb.append(DELIMITER);
|
sb.append(DELIMITER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sb.append(RIGHT_BRACKET);
|
sb.append(BRACKET_RIGHT);
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -94,10 +94,10 @@ public class OracleDialect extends CommonsDialectImpl {
|
|||||||
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
||||||
for (int i = 0; i < entities.size(); i++) {
|
for (int i = 0; i < entities.size(); i++) {
|
||||||
sql.append(INTO).append(tableInfo.getWrapSchemaAndTableName(this));
|
sql.append(INTO).append(tableInfo.getWrapSchemaAndTableName(this));
|
||||||
sql.append(BLANK).append(LEFT_BRACKET).append(StringUtil.join(DELIMITER, warpedInsertColumns)).append(RIGHT_BRACKET);
|
sql.append(BLANK).append(BRACKET_LEFT).append(StringUtil.join(DELIMITER, warpedInsertColumns)).append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES);
|
sql.append(VALUES);
|
||||||
|
|
||||||
StringJoiner stringJoiner = new StringJoiner(DELIMITER, LEFT_BRACKET, RIGHT_BRACKET);
|
StringJoiner stringJoiner = new StringJoiner(DELIMITER, BRACKET_LEFT, BRACKET_RIGHT);
|
||||||
for (String insertColumn : insertColumns) {
|
for (String insertColumn : insertColumns) {
|
||||||
if (onInsertColumns != null && onInsertColumns.containsKey(insertColumn)) {
|
if (onInsertColumns != null && onInsertColumns.containsKey(insertColumn)) {
|
||||||
//直接读取 onInsert 配置的值,而不用 "?" 代替
|
//直接读取 onInsert 配置的值,而不用 "?" 代替
|
||||||
@ -147,7 +147,7 @@ public class OracleDialect extends CommonsDialectImpl {
|
|||||||
|
|
||||||
for (int i = 0; i < rows.size(); i++) {
|
for (int i = 0; i < rows.size(); i++) {
|
||||||
sql.append(INTO).append(tableNameWrap);
|
sql.append(INTO).append(tableNameWrap);
|
||||||
sql.append(BLANK).append(LEFT_BRACKET).append(fields).append(RIGHT_BRACKET);
|
sql.append(BLANK).append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES).append(questionStrings);
|
sql.append(VALUES).append(questionStrings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -116,7 +116,7 @@ public class ArithmeticQueryColumn extends QueryColumn {
|
|||||||
for (int i = 0; i < arithmeticInfos.size(); i++) {
|
for (int i = 0; i < arithmeticInfos.size(); i++) {
|
||||||
sql.append(arithmeticInfos.get(i).toSql(queryTables, dialect, i));
|
sql.append(arithmeticInfos.get(i).toSql(queryTables, dialect, i));
|
||||||
}
|
}
|
||||||
return SqlConsts.LEFT_BRACKET + sql + SqlConsts.RIGHT_BRACKET;
|
return SqlConsts.BRACKET_LEFT + sql + SqlConsts.BRACKET_RIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -49,9 +49,9 @@ public class OperatorQueryCondition extends QueryCondition {
|
|||||||
sql.append(prevEffectiveCondition.connector);
|
sql.append(prevEffectiveCondition.connector);
|
||||||
}
|
}
|
||||||
sql.append(operator)
|
sql.append(operator)
|
||||||
.append(SqlConsts.LEFT_BRACKET)
|
.append(SqlConsts.BRACKET_LEFT)
|
||||||
.append(childSql)
|
.append(childSql)
|
||||||
.append(SqlConsts.RIGHT_BRACKET);
|
.append(SqlConsts.BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -51,9 +51,9 @@ public class OperatorSelectCondition extends QueryCondition {
|
|||||||
sql.append(prevEffectiveCondition.connector);
|
sql.append(prevEffectiveCondition.connector);
|
||||||
}
|
}
|
||||||
sql.append(operator)
|
sql.append(operator)
|
||||||
.append(SqlConsts.LEFT_BRACKET)
|
.append(SqlConsts.BRACKET_LEFT)
|
||||||
.append(childSql)
|
.append(childSql)
|
||||||
.append(SqlConsts.RIGHT_BRACKET);
|
.append(SqlConsts.BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -181,9 +181,9 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
|
|||||||
}
|
}
|
||||||
//子查询
|
//子查询
|
||||||
else if (value instanceof QueryWrapper) {
|
else if (value instanceof QueryWrapper) {
|
||||||
sql.append(SqlConsts.LEFT_BRACKET)
|
sql.append(SqlConsts.BRACKET_LEFT)
|
||||||
.append(dialect.buildSelectSql((QueryWrapper) value))
|
.append(dialect.buildSelectSql((QueryWrapper) value))
|
||||||
.append(SqlConsts.RIGHT_BRACKET);
|
.append(SqlConsts.BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
//原生sql
|
//原生sql
|
||||||
else if (value instanceof RawFragment) {
|
else if (value instanceof RawFragment) {
|
||||||
@ -228,14 +228,14 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
|
|||||||
//in, not in
|
//in, not in
|
||||||
else if (SqlConsts.IN.equals(logic) || SqlConsts.NOT_IN.equals(logic)) {
|
else if (SqlConsts.IN.equals(logic) || SqlConsts.NOT_IN.equals(logic)) {
|
||||||
int paramsCount = calculateValueArrayCount();
|
int paramsCount = calculateValueArrayCount();
|
||||||
sqlBuilder.append(SqlConsts.LEFT_BRACKET);
|
sqlBuilder.append(SqlConsts.BRACKET_LEFT);
|
||||||
for (int i = 0; i < paramsCount; i++) {
|
for (int i = 0; i < paramsCount; i++) {
|
||||||
sqlBuilder.append(SqlConsts.PLACEHOLDER);
|
sqlBuilder.append(SqlConsts.PLACEHOLDER);
|
||||||
if (i != paramsCount - 1) {
|
if (i != paramsCount - 1) {
|
||||||
sqlBuilder.append(SqlConsts.DELIMITER);
|
sqlBuilder.append(SqlConsts.DELIMITER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sqlBuilder.append(SqlConsts.RIGHT_BRACKET);
|
sqlBuilder.append(SqlConsts.BRACKET_RIGHT);
|
||||||
} else {
|
} else {
|
||||||
sqlBuilder.append(SqlConsts.PLACEHOLDER);
|
sqlBuilder.append(SqlConsts.PLACEHOLDER);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -61,9 +61,9 @@ public class UnionWrapper implements CloneSupport<UnionWrapper> {
|
|||||||
|
|
||||||
public void buildSql(StringBuilder sqlBuilder, IDialect dialect) {
|
public void buildSql(StringBuilder sqlBuilder, IDialect dialect) {
|
||||||
sqlBuilder.append(key)
|
sqlBuilder.append(key)
|
||||||
.append(SqlConsts.LEFT_BRACKET)
|
.append(SqlConsts.BRACKET_LEFT)
|
||||||
.append(dialect.buildSelectSql(queryWrapper))
|
.append(dialect.buildSelectSql(queryWrapper))
|
||||||
.append(SqlConsts.RIGHT_BRACKET);
|
.append(SqlConsts.BRACKET_RIGHT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -142,11 +142,11 @@ class WrapperUtil {
|
|||||||
|
|
||||||
|
|
||||||
static String withBracket(String sql) {
|
static String withBracket(String sql) {
|
||||||
return SqlConsts.LEFT_BRACKET + sql + SqlConsts.RIGHT_BRACKET;
|
return SqlConsts.BRACKET_LEFT + sql + SqlConsts.BRACKET_RIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static String withAlias(String sql, String alias) {
|
static String withAlias(String sql, String alias) {
|
||||||
return SqlConsts.LEFT_BRACKET + sql + SqlConsts.RIGHT_BRACKET + SqlConsts.AS + alias;
|
return SqlConsts.BRACKET_LEFT + sql + SqlConsts.BRACKET_RIGHT + SqlConsts.AS + alias;
|
||||||
}
|
}
|
||||||
|
|
||||||
static String withAliasIf(String alias, IDialect dialect) {
|
static String withAliasIf(String alias, IDialect dialect) {
|
||||||
|
|||||||
@ -694,7 +694,11 @@ public class TableInfo {
|
|||||||
|
|
||||||
//是否有循环引用
|
//是否有循环引用
|
||||||
boolean withCircularReference = context.contains(entityClass.getName());
|
boolean withCircularReference = context.contains(entityClass.getName());
|
||||||
String resultMapId = entityClass.getName() + (withCircularReference ? "$nested" : "");
|
if (withCircularReference) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
String resultMapId = entityClass.getName();
|
||||||
context.add(resultMapId);
|
context.add(resultMapId);
|
||||||
|
|
||||||
if (configuration.hasResultMap(resultMapId)) {
|
if (configuration.hasResultMap(resultMapId)) {
|
||||||
@ -734,30 +738,34 @@ public class TableInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// <resultMap> 标签下的 <association> 标签映射
|
// <resultMap> 标签下的 <association> 标签映射
|
||||||
if (!withCircularReference && associationType != null) {
|
if (associationType != null) {
|
||||||
associationType.forEach((fieldName, fieldType) -> {
|
associationType.forEach((fieldName, fieldType) -> {
|
||||||
// 获取嵌套类型的信息,也就是 javaType 属性
|
// 获取嵌套类型的信息,也就是 javaType 属性
|
||||||
TableInfo tableInfo = TableInfoFactory.ofEntityClass(fieldType);
|
TableInfo tableInfo = TableInfoFactory.ofEntityClass(fieldType);
|
||||||
// 构建嵌套类型的 ResultMap 对象,也就是 <association> 标签下的内容
|
// 构建嵌套类型的 ResultMap 对象,也就是 <association> 标签下的内容
|
||||||
ResultMap nestedResultMap = tableInfo.doBuildResultMap(configuration, context);
|
ResultMap nestedResultMap = tableInfo.doBuildResultMap(configuration, context);
|
||||||
resultMappings.add(new ResultMapping.Builder(configuration, fieldName)
|
if (nestedResultMap != null) {
|
||||||
.javaType(fieldType)
|
resultMappings.add(new ResultMapping.Builder(configuration, fieldName)
|
||||||
.nestedResultMapId(nestedResultMap.getId())
|
.javaType(fieldType)
|
||||||
.build());
|
.nestedResultMapId(nestedResultMap.getId())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// <resultMap> 标签下的 <collection> 标签映射
|
// <resultMap> 标签下的 <collection> 标签映射
|
||||||
if (!withCircularReference && collectionType != null) {
|
if (collectionType != null) {
|
||||||
collectionType.forEach((field, genericClass) -> {
|
collectionType.forEach((field, genericClass) -> {
|
||||||
// 获取集合泛型类型的信息,也就是 ofType 属性
|
// 获取集合泛型类型的信息,也就是 ofType 属性
|
||||||
TableInfo tableInfo = TableInfoFactory.ofEntityClass(genericClass);
|
TableInfo tableInfo = TableInfoFactory.ofEntityClass(genericClass);
|
||||||
// 构建嵌套类型的 ResultMap 对象,也就是 <collection> 标签下的内容
|
// 构建嵌套类型的 ResultMap 对象,也就是 <collection> 标签下的内容
|
||||||
ResultMap nestedResultMap = tableInfo.doBuildResultMap(configuration, context);
|
ResultMap nestedResultMap = tableInfo.doBuildResultMap(configuration, context);
|
||||||
resultMappings.add(new ResultMapping.Builder(configuration, field.getName())
|
if (nestedResultMap != null) {
|
||||||
.javaType(field.getType())
|
resultMappings.add(new ResultMapping.Builder(configuration, field.getName())
|
||||||
.nestedResultMapId(nestedResultMap.getId())
|
.javaType(field.getType())
|
||||||
.build());
|
.nestedResultMapId(nestedResultMap.getId())
|
||||||
|
.build());
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -216,12 +216,13 @@ public class TableInfoFactory {
|
|||||||
) {
|
) {
|
||||||
// 集合嵌套
|
// 集合嵌套
|
||||||
if (Collection.class.isAssignableFrom(fieldType)) {
|
if (Collection.class.isAssignableFrom(fieldType)) {
|
||||||
ParameterizedType genericType = (ParameterizedType) field.getGenericType();
|
Type genericType = field.getGenericType();
|
||||||
Type actualTypeArgument = genericType.getActualTypeArguments()[0];
|
if (genericType instanceof ParameterizedType){
|
||||||
|
Class<?> actualTypeArgument = (Class<?>) ((ParameterizedType) genericType).getActualTypeArguments()[0];
|
||||||
//需排除 List<String> List<Long> 等场景
|
//需排除 List<String> List<Long> 等场景
|
||||||
if (!defaultSupportColumnTypes.contains(actualTypeArgument)) {
|
if (!defaultSupportColumnTypes.contains(actualTypeArgument)) {
|
||||||
tableInfo.addCollectionType(field, (Class<?>) actualTypeArgument);
|
tableInfo.addCollectionType(field, actualTypeArgument);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 实体类嵌套
|
// 实体类嵌套
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user