mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 17:18:24 +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 BLANK = " ";
|
||||
public static final String ASTERISK = "*";
|
||||
@ -38,14 +37,13 @@ public final class SqlConsts {
|
||||
public static final String PLACEHOLDER = "?";
|
||||
public static final String PERCENT_SIGN = "%";
|
||||
public static final String SINGLE_QUOTE = "'";
|
||||
public static final String LEFT_BRACKET = "(";
|
||||
public static final String RIGHT_BRACKET = ")";
|
||||
|
||||
// === SQL 关键字 ===
|
||||
|
||||
public static final String BRACKET_LEFT = "(";
|
||||
public static final String BRACKET_RIGHT = ")";
|
||||
public static final String HINT_START = "/*+ ";
|
||||
public static final String HINT_END = " */ ";
|
||||
|
||||
|
||||
// === SQL 关键字 ===
|
||||
public static final String AS = " AS ";
|
||||
public static final String OR = " OR ";
|
||||
public static final String END = " END";
|
||||
@ -56,9 +54,7 @@ public final class SqlConsts {
|
||||
public static final String THEN = " THEN ";
|
||||
public static final String ELSE = " ELSE ";
|
||||
public static final String FROM = " FROM ";
|
||||
public static final String INTO = " INTO ";
|
||||
public static final String WHERE = " WHERE ";
|
||||
public static final String INSERT = "INSERT";
|
||||
public static final String SELECT = "SELECT ";
|
||||
public static final String VALUES = " VALUES ";
|
||||
public static final String DELETE = "DELETE";
|
||||
@ -67,15 +63,19 @@ public final class SqlConsts {
|
||||
public static final String DISTINCT = "DISTINCT ";
|
||||
public static final String GROUP_BY = " GROUP 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 DELETE_FROM = DELETE + 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_END = " SELECT 1 FROM DUAL";
|
||||
|
||||
|
||||
|
||||
// === Limit Offset ===
|
||||
|
||||
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 ON = " ON ";
|
||||
public static final String JOIN = " JOIN ";
|
||||
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 CROSS_JOIN = " CROSS JOIN ";
|
||||
|
||||
// === 逻辑符号 ===
|
||||
|
||||
// === 逻辑符号 ===
|
||||
public static final String GT = " > ";
|
||||
public static final String GE = " >= ";
|
||||
public static final String LT = " < ";
|
||||
public static final String LE = " <= ";
|
||||
public static final String NOT = " NOT ";
|
||||
public static final String LIKE = " LIKE ";
|
||||
|
||||
public static final String EQUALS = " = ";
|
||||
public static final String NOT_EQUALS = " != ";
|
||||
|
||||
public static final String IS_NULL = " IS NULL ";
|
||||
public static final String IS_NOT_NULL = " IS NOT NULL ";
|
||||
|
||||
public static final String IN = " IN ";
|
||||
public static final String NOT_IN = " NOT IN ";
|
||||
|
||||
public static final String BETWEEN = " BETWEEN ";
|
||||
public static final String NOT_BETWEEN = " NOT BETWEEN ";
|
||||
|
||||
public static final String EXISTS = " EXISTS ";
|
||||
public static final String NOT_EXISTS = " NOT EXISTS ";
|
||||
|
||||
// === 排序相关关键字 ===
|
||||
|
||||
// === 排序相关关键字 ===
|
||||
public static final String ASC = " ASC";
|
||||
public static final String DESC = " DESC";
|
||||
public static final String NULLS_FIRST = " NULLS FIRST";
|
||||
public static final String NULLS_LAST = " NULLS LAST";
|
||||
|
||||
// === SQL 函数名 ===
|
||||
|
||||
// === SQL 函数名 ===
|
||||
public static final String SUM = "SUM";
|
||||
public static final String MAX = "MIX";
|
||||
public static final String MIN = "MIN";
|
||||
@ -147,16 +141,17 @@ public final class SqlConsts {
|
||||
public static final String COUNT = "COUNT";
|
||||
public static final String CONVERT = "CONVERT";
|
||||
|
||||
// === 数学运算符 ===
|
||||
|
||||
// === 数学运算符 ===
|
||||
public static final String PLUS_SIGN = " + ";
|
||||
|
||||
// === 数学运算符 ===
|
||||
public static final String MINUS_SIGN = " - ";
|
||||
public static final String DIVISION_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;
|
||||
|
||||
}
|
||||
@ -91,8 +91,8 @@ public class CommonsDialectImpl implements IDialect {
|
||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
||||
}
|
||||
sql.append(wrap(getRealTable(tableName)));
|
||||
sql.append(LEFT_BRACKET).append(fields).append(RIGHT_BRACKET);
|
||||
sql.append(VALUES).append(LEFT_BRACKET).append(questions).append(RIGHT_BRACKET);
|
||||
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
||||
sql.append(VALUES).append(BRACKET_LEFT).append(questions).append(BRACKET_RIGHT);
|
||||
return sql.toString();
|
||||
}
|
||||
|
||||
@ -127,9 +127,9 @@ public class CommonsDialectImpl implements IDialect {
|
||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
||||
}
|
||||
sql.append(wrap(getRealTable(tableName)));
|
||||
sql.append(BLANK).append(LEFT_BRACKET)
|
||||
sql.append(BLANK).append(BRACKET_LEFT)
|
||||
.append(fields)
|
||||
.append(RIGHT_BRACKET).append(BLANK);
|
||||
.append(BRACKET_RIGHT).append(BLANK);
|
||||
sql.append(VALUES).append(questions);
|
||||
return sql.toString();
|
||||
}
|
||||
@ -170,14 +170,14 @@ public class CommonsDialectImpl implements IDialect {
|
||||
if (i > 0) {
|
||||
sql.append(OR);
|
||||
}
|
||||
sql.append(LEFT_BRACKET);
|
||||
sql.append(BRACKET_LEFT);
|
||||
for (int j = 0; j < primaryKeys.length; j++) {
|
||||
if (j > 0) {
|
||||
sql.append(AND);
|
||||
}
|
||||
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);
|
||||
if (CollectionUtil.isNotEmpty(unions)) {
|
||||
sqlBuilder.insert(0, LEFT_BRACKET).append(RIGHT_BRACKET);
|
||||
sqlBuilder.insert(0, BRACKET_LEFT).append(BRACKET_RIGHT);
|
||||
for (UnionWrapper unionWrapper : unions) {
|
||||
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(LEFT_BRACKET).append(sqlValues).append(RIGHT_BRACKET)
|
||||
.append(BRACKET_LEFT).append(sqlValues).append(BRACKET_RIGHT)
|
||||
.toString();
|
||||
}
|
||||
|
||||
@ -434,14 +434,14 @@ public class CommonsDialectImpl implements IDialect {
|
||||
for (int i = 0; i < insertColumns.length; i++) {
|
||||
warpedInsertColumns[i] = wrap(insertColumns[i]);
|
||||
}
|
||||
sql.append(LEFT_BRACKET)
|
||||
sql.append(BRACKET_LEFT)
|
||||
.append(StringUtil.join(DELIMITER, warpedInsertColumns))
|
||||
.append(RIGHT_BRACKET);
|
||||
.append(BRACKET_RIGHT);
|
||||
sql.append(VALUES);
|
||||
|
||||
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
||||
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) {
|
||||
if (onInsertColumns != null && onInsertColumns.containsKey(insertColumn)) {
|
||||
//直接读取 onInsert 配置的值,而不用 "?" 代替
|
||||
@ -509,7 +509,7 @@ public class CommonsDialectImpl implements IDialect {
|
||||
|
||||
//多租户
|
||||
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);
|
||||
}
|
||||
return deleteSQL;
|
||||
@ -520,7 +520,7 @@ public class CommonsDialectImpl implements IDialect {
|
||||
sql.append(tableInfo.getWrapSchemaAndTableName(this));
|
||||
sql.append(SET).append(wrap(logicDeleteColumn)).append(EQUALS).append(getLogicDeletedValue());
|
||||
sql.append(WHERE);
|
||||
sql.append(LEFT_BRACKET);
|
||||
sql.append(BRACKET_LEFT);
|
||||
|
||||
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
||||
|
||||
@ -530,14 +530,14 @@ public class CommonsDialectImpl implements IDialect {
|
||||
if (i > 0) {
|
||||
sql.append(OR);
|
||||
}
|
||||
sql.append(LEFT_BRACKET);
|
||||
sql.append(BRACKET_LEFT);
|
||||
for (int j = 0; j < primaryKeys.length; j++) {
|
||||
if (j > 0) {
|
||||
sql.append(AND);
|
||||
}
|
||||
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)) {
|
||||
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();
|
||||
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
||||
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) {
|
||||
sql.append(OR);
|
||||
}
|
||||
sql.append(LEFT_BRACKET);
|
||||
sql.append(BRACKET_LEFT);
|
||||
for (int j = 0; j < primaryKeys.length; j++) {
|
||||
if (j > 0) {
|
||||
sql.append(AND);
|
||||
}
|
||||
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)) {
|
||||
sql.append(RIGHT_BRACKET);
|
||||
sql.append(BRACKET_RIGHT);
|
||||
}
|
||||
|
||||
|
||||
@ -932,14 +932,14 @@ public class CommonsDialectImpl implements IDialect {
|
||||
|
||||
|
||||
protected String buildQuestion(int count) {
|
||||
StringBuilder sb = new StringBuilder(LEFT_BRACKET);
|
||||
StringBuilder sb = new StringBuilder(BRACKET_LEFT);
|
||||
for (int i = 0; i < count; i++) {
|
||||
sb.append(PLACEHOLDER);
|
||||
if (i != count - 1) {
|
||||
sb.append(DELIMITER);
|
||||
}
|
||||
}
|
||||
sb.append(RIGHT_BRACKET);
|
||||
sb.append(BRACKET_RIGHT);
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
|
||||
@ -94,10 +94,10 @@ public class OracleDialect extends CommonsDialectImpl {
|
||||
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
||||
for (int i = 0; i < entities.size(); i++) {
|
||||
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);
|
||||
|
||||
StringJoiner stringJoiner = new StringJoiner(DELIMITER, LEFT_BRACKET, RIGHT_BRACKET);
|
||||
StringJoiner stringJoiner = new StringJoiner(DELIMITER, BRACKET_LEFT, BRACKET_RIGHT);
|
||||
for (String insertColumn : insertColumns) {
|
||||
if (onInsertColumns != null && onInsertColumns.containsKey(insertColumn)) {
|
||||
//直接读取 onInsert 配置的值,而不用 "?" 代替
|
||||
@ -147,7 +147,7 @@ public class OracleDialect extends CommonsDialectImpl {
|
||||
|
||||
for (int i = 0; i < rows.size(); i++) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
@ -116,7 +116,7 @@ public class ArithmeticQueryColumn extends QueryColumn {
|
||||
for (int i = 0; i < arithmeticInfos.size(); 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(operator)
|
||||
.append(SqlConsts.LEFT_BRACKET)
|
||||
.append(SqlConsts.BRACKET_LEFT)
|
||||
.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(operator)
|
||||
.append(SqlConsts.LEFT_BRACKET)
|
||||
.append(SqlConsts.BRACKET_LEFT)
|
||||
.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) {
|
||||
sql.append(SqlConsts.LEFT_BRACKET)
|
||||
sql.append(SqlConsts.BRACKET_LEFT)
|
||||
.append(dialect.buildSelectSql((QueryWrapper) value))
|
||||
.append(SqlConsts.RIGHT_BRACKET);
|
||||
.append(SqlConsts.BRACKET_RIGHT);
|
||||
}
|
||||
//原生sql
|
||||
else if (value instanceof RawFragment) {
|
||||
@ -228,14 +228,14 @@ public class QueryCondition implements CloneSupport<QueryCondition> {
|
||||
//in, not in
|
||||
else if (SqlConsts.IN.equals(logic) || SqlConsts.NOT_IN.equals(logic)) {
|
||||
int paramsCount = calculateValueArrayCount();
|
||||
sqlBuilder.append(SqlConsts.LEFT_BRACKET);
|
||||
sqlBuilder.append(SqlConsts.BRACKET_LEFT);
|
||||
for (int i = 0; i < paramsCount; i++) {
|
||||
sqlBuilder.append(SqlConsts.PLACEHOLDER);
|
||||
if (i != paramsCount - 1) {
|
||||
sqlBuilder.append(SqlConsts.DELIMITER);
|
||||
}
|
||||
}
|
||||
sqlBuilder.append(SqlConsts.RIGHT_BRACKET);
|
||||
sqlBuilder.append(SqlConsts.BRACKET_RIGHT);
|
||||
} else {
|
||||
sqlBuilder.append(SqlConsts.PLACEHOLDER);
|
||||
}
|
||||
|
||||
@ -61,9 +61,9 @@ public class UnionWrapper implements CloneSupport<UnionWrapper> {
|
||||
|
||||
public void buildSql(StringBuilder sqlBuilder, IDialect dialect) {
|
||||
sqlBuilder.append(key)
|
||||
.append(SqlConsts.LEFT_BRACKET)
|
||||
.append(SqlConsts.BRACKET_LEFT)
|
||||
.append(dialect.buildSelectSql(queryWrapper))
|
||||
.append(SqlConsts.RIGHT_BRACKET);
|
||||
.append(SqlConsts.BRACKET_RIGHT);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -142,11 +142,11 @@ class WrapperUtil {
|
||||
|
||||
|
||||
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) {
|
||||
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) {
|
||||
|
||||
@ -694,7 +694,11 @@ public class TableInfo {
|
||||
|
||||
//是否有循环引用
|
||||
boolean withCircularReference = context.contains(entityClass.getName());
|
||||
String resultMapId = entityClass.getName() + (withCircularReference ? "$nested" : "");
|
||||
if (withCircularReference) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String resultMapId = entityClass.getName();
|
||||
context.add(resultMapId);
|
||||
|
||||
if (configuration.hasResultMap(resultMapId)) {
|
||||
@ -734,30 +738,34 @@ public class TableInfo {
|
||||
}
|
||||
|
||||
// <resultMap> 标签下的 <association> 标签映射
|
||||
if (!withCircularReference && associationType != null) {
|
||||
if (associationType != null) {
|
||||
associationType.forEach((fieldName, fieldType) -> {
|
||||
// 获取嵌套类型的信息,也就是 javaType 属性
|
||||
TableInfo tableInfo = TableInfoFactory.ofEntityClass(fieldType);
|
||||
// 构建嵌套类型的 ResultMap 对象,也就是 <association> 标签下的内容
|
||||
ResultMap nestedResultMap = tableInfo.doBuildResultMap(configuration, context);
|
||||
resultMappings.add(new ResultMapping.Builder(configuration, fieldName)
|
||||
.javaType(fieldType)
|
||||
.nestedResultMapId(nestedResultMap.getId())
|
||||
.build());
|
||||
if (nestedResultMap != null) {
|
||||
resultMappings.add(new ResultMapping.Builder(configuration, fieldName)
|
||||
.javaType(fieldType)
|
||||
.nestedResultMapId(nestedResultMap.getId())
|
||||
.build());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// <resultMap> 标签下的 <collection> 标签映射
|
||||
if (!withCircularReference && collectionType != null) {
|
||||
if (collectionType != null) {
|
||||
collectionType.forEach((field, genericClass) -> {
|
||||
// 获取集合泛型类型的信息,也就是 ofType 属性
|
||||
TableInfo tableInfo = TableInfoFactory.ofEntityClass(genericClass);
|
||||
// 构建嵌套类型的 ResultMap 对象,也就是 <collection> 标签下的内容
|
||||
ResultMap nestedResultMap = tableInfo.doBuildResultMap(configuration, context);
|
||||
resultMappings.add(new ResultMapping.Builder(configuration, field.getName())
|
||||
.javaType(field.getType())
|
||||
.nestedResultMapId(nestedResultMap.getId())
|
||||
.build());
|
||||
if (nestedResultMap != null) {
|
||||
resultMappings.add(new ResultMapping.Builder(configuration, field.getName())
|
||||
.javaType(field.getType())
|
||||
.nestedResultMapId(nestedResultMap.getId())
|
||||
.build());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@ -216,12 +216,13 @@ public class TableInfoFactory {
|
||||
) {
|
||||
// 集合嵌套
|
||||
if (Collection.class.isAssignableFrom(fieldType)) {
|
||||
ParameterizedType genericType = (ParameterizedType) field.getGenericType();
|
||||
Type actualTypeArgument = genericType.getActualTypeArguments()[0];
|
||||
|
||||
//需排除 List<String> List<Long> 等场景
|
||||
if (!defaultSupportColumnTypes.contains(actualTypeArgument)) {
|
||||
tableInfo.addCollectionType(field, (Class<?>) actualTypeArgument);
|
||||
Type genericType = field.getGenericType();
|
||||
if (genericType instanceof ParameterizedType){
|
||||
Class<?> actualTypeArgument = (Class<?>) ((ParameterizedType) genericType).getActualTypeArguments()[0];
|
||||
//需排除 List<String> List<Long> 等场景
|
||||
if (!defaultSupportColumnTypes.contains(actualTypeArgument)) {
|
||||
tableInfo.addCollectionType(field, actualTypeArgument);
|
||||
}
|
||||
}
|
||||
}
|
||||
// 实体类嵌套
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user