mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-06 16:48:24 +08:00
feat: 重构 DynamicSchemaProcessor,添加 table 参数
This commit is contained in:
parent
338e17f30e
commit
f5b9f37dbf
@ -35,8 +35,8 @@ public interface IDialect {
|
|||||||
return TableManager.getRealTable(table);
|
return TableManager.getRealTable(table);
|
||||||
}
|
}
|
||||||
|
|
||||||
default String getRealSchema(String schema) {
|
default String getRealSchema(String schema, String table) {
|
||||||
return TableManager.getRealSchema(schema);
|
return TableManager.getRealSchema(schema, table);
|
||||||
}
|
}
|
||||||
|
|
||||||
String forHint(String hintString);
|
String forHint(String hintString);
|
||||||
|
|||||||
@ -96,12 +96,13 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
index++;
|
index++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String table = getRealTable(tableName);
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(INSERT_INTO);
|
sql.append(INSERT_INTO);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(table));
|
||||||
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT);
|
||||||
sql.append(VALUES).append(BRACKET_LEFT).append(paramsOrPlaceholder).append(BRACKET_RIGHT);
|
sql.append(VALUES).append(BRACKET_LEFT).append(paramsOrPlaceholder).append(BRACKET_RIGHT);
|
||||||
return sql.toString();
|
return sql.toString();
|
||||||
@ -131,13 +132,13 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String table = getRealTable(tableName);
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(INSERT_INTO);
|
sql.append(INSERT_INTO);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(table));
|
||||||
sql.append(BLANK).append(BRACKET_LEFT)
|
sql.append(BLANK).append(BRACKET_LEFT)
|
||||||
.append(fields)
|
.append(fields)
|
||||||
.append(BRACKET_RIGHT).append(BLANK);
|
.append(BRACKET_RIGHT).append(BLANK);
|
||||||
@ -148,12 +149,13 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String forDeleteById(String schema, String tableName, String[] primaryKeys) {
|
public String forDeleteById(String schema, String tableName, String[] primaryKeys) {
|
||||||
|
String table = getRealTable(tableName);
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(DELETE_FROM);
|
sql.append(DELETE_FROM);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(table));
|
||||||
sql.append(WHERE);
|
sql.append(WHERE);
|
||||||
for (int i = 0; i < primaryKeys.length; i++) {
|
for (int i = 0; i < primaryKeys.length; i++) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
@ -167,12 +169,14 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids) {
|
public String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids) {
|
||||||
|
String table = getRealTable(tableName);
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(DELETE_FROM);
|
sql.append(DELETE_FROM);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
|
||||||
|
sql.append(wrap(table));
|
||||||
sql.append(WHERE);
|
sql.append(WHERE);
|
||||||
|
|
||||||
//多主键的场景
|
//多主键的场景
|
||||||
@ -210,17 +214,18 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String forUpdateById(String schema, String tableName, Row row) {
|
public String forUpdateById(String schema, String tableName, Row row) {
|
||||||
|
String table = getRealTable(tableName);
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
|
|
||||||
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
|
Set<String> modifyAttrs = RowCPI.getModifyAttrs(row);
|
||||||
Map<String, RawValue> rawValueMap = RowCPI.getRawValueMap(row);
|
Map<String, RawValue> rawValueMap = RowCPI.getRawValueMap(row);
|
||||||
String[] primaryKeys = RowCPI.obtainsPrimaryKeyStrings(row);
|
String[] primaryKeys = RowCPI.obtainsPrimaryKeyStrings(row);
|
||||||
|
|
||||||
sql.append(UPDATE);
|
sql.append(UPDATE);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName))).append(SET);
|
|
||||||
|
sql.append(wrap(table)).append(SET);
|
||||||
int index = 0;
|
int index = 0;
|
||||||
for (Map.Entry<String, Object> e : row.entrySet()) {
|
for (Map.Entry<String, Object> e : row.entrySet()) {
|
||||||
String colName = e.getKey();
|
String colName = e.getKey();
|
||||||
@ -314,11 +319,12 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String forSelectOneById(String schema, String tableName, String[] primaryKeys, Object[] primaryValues) {
|
public String forSelectOneById(String schema, String tableName, String[] primaryKeys, Object[] primaryValues) {
|
||||||
|
String table = getRealTable(tableName);
|
||||||
StringBuilder sql = new StringBuilder(SELECT_ALL_FROM);
|
StringBuilder sql = new StringBuilder(SELECT_ALL_FROM);
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql.append(wrap(getRealSchema(schema))).append(REFERENCE);
|
sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE);
|
||||||
}
|
}
|
||||||
sql.append(wrap(getRealTable(tableName))).append(WHERE);
|
sql.append(wrap(table)).append(WHERE);
|
||||||
for (int i = 0; i < primaryKeys.length; i++) {
|
for (int i = 0; i < primaryKeys.length; i++) {
|
||||||
if (i > 0) {
|
if (i > 0) {
|
||||||
sql.append(AND);
|
sql.append(AND);
|
||||||
|
|||||||
@ -168,9 +168,10 @@ public class OracleDialect extends CommonsDialectImpl {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append(INSERT_ALL);
|
sql.append(INSERT_ALL);
|
||||||
|
|
||||||
|
String table = getRealTable(tableName);
|
||||||
String tableNameWrap = StringUtil.isNotBlank(schema)
|
String tableNameWrap = StringUtil.isNotBlank(schema)
|
||||||
? wrap(getRealSchema(schema)) + REFERENCE + wrap(getRealTable(tableName))
|
? wrap(getRealSchema(schema,table)) + REFERENCE + wrap(table)
|
||||||
: wrap(getRealTable(tableName));
|
: wrap(table);
|
||||||
String questionStrings = SqlUtil.buildSqlParamPlaceholder(attrs.size());
|
String questionStrings = SqlUtil.buildSqlParamPlaceholder(attrs.size());
|
||||||
|
|
||||||
for (int i = 0; i < rows.size(); i++) {
|
for (int i = 0; i < rows.size(); i++) {
|
||||||
|
|||||||
@ -977,7 +977,9 @@ public class QueryColumn implements CloneSupport<QueryColumn>, Conditional<Query
|
|||||||
if (StringUtil.isNotBlank(selectTable.alias)) {
|
if (StringUtil.isNotBlank(selectTable.alias)) {
|
||||||
return dialect.wrap(selectTable.alias) + SqlConsts.REFERENCE + dialect.wrap(name);
|
return dialect.wrap(selectTable.alias) + SqlConsts.REFERENCE + dialect.wrap(name);
|
||||||
} else if (StringUtil.isNotBlank(selectTable.getSchema()) && StringUtil.isNotBlank(selectTable.getName())) {
|
} else if (StringUtil.isNotBlank(selectTable.getSchema()) && StringUtil.isNotBlank(selectTable.getName())) {
|
||||||
return dialect.wrap(dialect.getRealSchema(selectTable.schema)) + SqlConsts.REFERENCE + dialect.wrap(dialect.getRealTable(selectTable.getName())) + SqlConsts.REFERENCE + dialect.wrap(name);
|
String realTable = dialect.getRealTable(selectTable.getName());
|
||||||
|
return dialect.wrap(dialect.getRealSchema(selectTable.schema, realTable)) + SqlConsts.REFERENCE + dialect.wrap(realTable)
|
||||||
|
+ SqlConsts.REFERENCE + dialect.wrap(name);
|
||||||
} else if (StringUtil.isNotBlank(selectTable.getName())) {
|
} else if (StringUtil.isNotBlank(selectTable.getName())) {
|
||||||
return dialect.wrap(dialect.getRealTable(selectTable.getName())) + SqlConsts.REFERENCE + dialect.wrap(name);
|
return dialect.wrap(dialect.getRealTable(selectTable.getName())) + SqlConsts.REFERENCE + dialect.wrap(name);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -114,7 +114,8 @@ public class QueryTable implements CloneSupport<QueryTable> {
|
|||||||
public String toSql(IDialect dialect) {
|
public String toSql(IDialect dialect) {
|
||||||
String sql;
|
String sql;
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
sql = dialect.wrap(dialect.getRealSchema(schema)) + "." + dialect.wrap(dialect.getRealTable(name)) + WrapperUtil.buildAlias(alias, dialect);
|
String table = dialect.getRealTable(name);
|
||||||
|
sql = dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table) + WrapperUtil.buildAlias(alias, dialect);
|
||||||
} else {
|
} else {
|
||||||
sql = dialect.wrap(dialect.getRealTable(name)) + WrapperUtil.buildAlias(alias, dialect);
|
sql = dialect.wrap(dialect.getRealTable(name)) + WrapperUtil.buildAlias(alias, dialect);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,6 +17,6 @@ package com.mybatisflex.core.table;
|
|||||||
|
|
||||||
public interface DynamicSchemaProcessor {
|
public interface DynamicSchemaProcessor {
|
||||||
|
|
||||||
String process(String schema);
|
String process(String schema, String table);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -143,7 +143,8 @@ public class TableInfo {
|
|||||||
|
|
||||||
public String getWrapSchemaAndTableName(IDialect dialect) {
|
public String getWrapSchemaAndTableName(IDialect dialect) {
|
||||||
if (StringUtil.isNotBlank(schema)) {
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
return dialect.wrap(dialect.getRealSchema(schema)) + "." + dialect.wrap(dialect.getRealTable(tableName));
|
String table = dialect.getRealTable(tableName);
|
||||||
|
return dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table);
|
||||||
} else {
|
} else {
|
||||||
return dialect.wrap(dialect.getRealTable(tableName));
|
return dialect.wrap(dialect.getRealTable(tableName));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,7 +97,7 @@ public class TableManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static String getRealSchema(String schema) {
|
public static String getRealSchema(String schema, String table) {
|
||||||
Map<String, String> mapping = schemaMappingTL.get();
|
Map<String, String> mapping = schemaMappingTL.get();
|
||||||
if (mapping != null) {
|
if (mapping != null) {
|
||||||
String dynamicSchema = mapping.get(schema);
|
String dynamicSchema = mapping.get(schema);
|
||||||
@ -110,7 +110,7 @@ public class TableManager {
|
|||||||
return schema;
|
return schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
String dynamicSchema = dynamicSchemaProcessor.process(schema);
|
String dynamicSchema = dynamicSchemaProcessor.process(schema, table);
|
||||||
return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema;
|
return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user