diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java index d7cc2829..2fd7a800 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java @@ -40,9 +40,9 @@ public interface IDialect { String forInsertBatchWithFirstRowColumns(String tableName, List rows); - String forDeleteById(String tableName, String[] primaryKeys); + String forDeleteById(String schema, String tableName, String[] primaryKeys); - String forDeleteBatchByIds(String tableName, String[] primaryKeys, Object[] ids); + String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids); String forDeleteByQuery(QueryWrapper queryWrapper); @@ -78,7 +78,7 @@ public interface IDialect { String forUpdateEntityByQuery(TableInfo tableInfo, Object entity, boolean ignoreNulls, QueryWrapper queryWrapper); - String forUpdateNumberAddByQuery(String tableName, String fieldName, Number value, QueryWrapper queryWrapper); + String forUpdateNumberAddByQuery(String schema,String tableName, String fieldName, Number value, QueryWrapper queryWrapper); String forSelectOneEntityById(TableInfo tableInfo); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java index c461acf9..61c70e3b 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java @@ -119,9 +119,12 @@ public class CommonsDialectImpl implements IDialect { @Override - public String forDeleteById(String tableName, String[] primaryKeys) { + public String forDeleteById(String schema, String tableName, String[] primaryKeys) { StringBuilder sql = new StringBuilder(); sql.append("DELETE FROM "); + if (StringUtil.isNotBlank(schema)) { + sql.append(wrap(getRealSchema(schema))).append("."); + } sql.append(wrap(getRealTable(tableName))); sql.append(" WHERE "); for (int i = 0; i < primaryKeys.length; i++) { @@ -135,9 +138,12 @@ public class CommonsDialectImpl implements IDialect { @Override - public String forDeleteBatchByIds(String tableName, String[] primaryKeys, Object[] ids) { + public String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids) { StringBuilder sql = new StringBuilder(); sql.append("DELETE FROM "); + if (StringUtil.isNotBlank(schema)) { + sql.append(wrap(getRealSchema(schema))).append("."); + } sql.append(wrap(getRealTable(tableName))); sql.append(" WHERE "); @@ -366,7 +372,7 @@ public class CommonsDialectImpl implements IDialect { @Override public String forInsertEntity(TableInfo tableInfo, Object entity, boolean ignoreNulls) { StringBuilder sql = new StringBuilder(); - sql.append("INSERT INTO ").append(wrap(tableInfo.getTableName())); + sql.append("INSERT INTO ").append(tableInfo.getWrapSchemaAndTableName(this)); String[] insertColumns = tableInfo.obtainInsertColumns(entity, ignoreNulls); Map onInsertColumns = tableInfo.getOnInsertColumns(); @@ -391,7 +397,7 @@ public class CommonsDialectImpl implements IDialect { @Override public String forInsertEntityBatch(TableInfo tableInfo, List entities) { StringBuilder sql = new StringBuilder(); - sql.append("INSERT INTO ").append(wrap(tableInfo.getTableName())); + sql.append("INSERT INTO ").append(tableInfo.getWrapSchemaAndTableName(this)); String[] insertColumns = tableInfo.obtainInsertColumns(null, false); String[] warpedInsertColumns = new String[insertColumns.length]; for (int i = 0; i < insertColumns.length; i++) { @@ -426,7 +432,7 @@ public class CommonsDialectImpl implements IDialect { Object[] tenantIdArgs = tableInfo.buildTenantIdArgs(); //正常删除 if (StringUtil.isBlank(logicDeleteColumn)) { - String deleteByIdSql = forDeleteById(tableInfo.getTableName(), tableInfo.getPrimaryKeys()); + String deleteByIdSql = forDeleteById(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getPrimaryKeys()); if (ArrayUtil.isNotEmpty(tenantIdArgs)) { deleteByIdSql += " AND " + wrap(tableInfo.getTenantIdColumn()) + " IN " + buildQuestion(tenantIdArgs.length, true); @@ -438,7 +444,7 @@ public class CommonsDialectImpl implements IDialect { StringBuilder sql = new StringBuilder(); String[] primaryKeys = tableInfo.getPrimaryKeys(); - sql.append("UPDATE ").append(wrap(tableInfo.getTableName())); + sql.append("UPDATE ").append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue()); sql.append(" WHERE "); for (int i = 0; i < primaryKeys.length; i++) { @@ -466,7 +472,7 @@ public class CommonsDialectImpl implements IDialect { //正常删除 if (StringUtil.isBlank(logicDeleteColumn)) { - String deleteSQL = forDeleteBatchByIds(tableInfo.getTableName(), tableInfo.getPrimaryKeys(), primaryValues); + String deleteSQL = forDeleteBatchByIds(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getPrimaryKeys(), primaryValues); //多租户 if (ArrayUtil.isNotEmpty(tenantIdArgs)) { @@ -478,7 +484,7 @@ public class CommonsDialectImpl implements IDialect { StringBuilder sql = new StringBuilder(); sql.append("UPDATE "); - sql.append(wrap(tableInfo.getTableName())); + sql.append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue()); sql.append(" WHERE "); sql.append("("); @@ -538,7 +544,7 @@ public class CommonsDialectImpl implements IDialect { //ignore selectColumns StringBuilder sqlBuilder = new StringBuilder("UPDATE ").append(forHint(CPI.getHint(queryWrapper))); - sqlBuilder.append(wrap(tableInfo.getTableName())); + sqlBuilder.append(tableInfo.getWrapSchemaAndTableName(this)); sqlBuilder.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue()); @@ -562,7 +568,7 @@ public class CommonsDialectImpl implements IDialect { Set modifyAttrs = tableInfo.obtainUpdateColumns(entity, ignoreNulls, false); String[] primaryKeys = tableInfo.getPrimaryKeys(); - sql.append("UPDATE ").append(wrap(tableInfo.getTableName())).append(" SET "); + sql.append("UPDATE ").append(tableInfo.getWrapSchemaAndTableName(this)).append(" SET "); StringJoiner stringJoiner = new StringJoiner(", "); @@ -627,7 +633,8 @@ public class CommonsDialectImpl implements IDialect { Set modifyAttrs = tableInfo.obtainUpdateColumns(entity, ignoreNulls, true); - sql.append("UPDATE ").append(forHint(CPI.getHint(queryWrapper))).append(wrap(tableInfo.getTableName())).append(" SET "); + sql.append("UPDATE ").append(forHint(CPI.getHint(queryWrapper))) + .append(tableInfo.getWrapSchemaAndTableName(this)).append(" SET "); StringJoiner stringJoiner = new StringJoiner(", "); @@ -670,9 +677,13 @@ public class CommonsDialectImpl implements IDialect { @Override - public String forUpdateNumberAddByQuery(String tableName, String fieldName, Number value, QueryWrapper queryWrapper) { + public String forUpdateNumberAddByQuery(String schema, String tableName, String fieldName, Number value, QueryWrapper queryWrapper) { StringBuilder sql = new StringBuilder(); - sql.append("UPDATE ").append(forHint(CPI.getHint(queryWrapper))).append(wrap(tableName)).append(" SET "); + sql.append("UPDATE ").append(forHint(CPI.getHint(queryWrapper))); + if (StringUtil.isNotBlank(schema)) { + sql.append(wrap(getRealSchema(schema))).append("."); + } + sql.append(wrap(getRealTable(tableName))).append(" SET "); sql.append(wrap(fieldName)).append("=").append(wrap(fieldName)).append(value.intValue() >= 0 ? " + " : " - ").append(Math.abs(value.longValue())); String whereConditionSql = buildWhereConditionSql(queryWrapper); @@ -698,7 +709,7 @@ public class CommonsDialectImpl implements IDialect { @Override public String forSelectOneEntityById(TableInfo tableInfo) { StringBuilder sql = buildSelectColumnSql(null, null, null); - sql.append(" FROM ").append(wrap(tableInfo.getTableName())); + sql.append(" FROM ").append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(" WHERE "); String[] pKeys = tableInfo.getPrimaryKeys(); for (int i = 0; i < pKeys.length; i++) { @@ -727,7 +738,7 @@ public class CommonsDialectImpl implements IDialect { @Override public String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues) { StringBuilder sql = buildSelectColumnSql(null, tableInfo.getDefaultQueryColumn(), null); - sql.append(" FROM ").append(wrap(tableInfo.getTableName())); + sql.append(" FROM ").append(tableInfo.getWrapSchemaAndTableName(this)); sql.append(" WHERE "); String[] primaryKeys = tableInfo.getPrimaryKeys(); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java index 6429f1aa..22d64e57 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/EntitySqlProvider.java @@ -270,7 +270,7 @@ public class EntitySqlProvider { ProviderUtil.setSqlArgs(params, queryParams); - return DialectFactory.getDialect().forUpdateNumberAddByQuery(tableInfo.getTableName(), fieldName, value, queryWrapper); + return DialectFactory.getDialect().forUpdateNumberAddByQuery(tableInfo.getSchema(), tableInfo.getTableName(), fieldName, value, queryWrapper); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java index 8c30cabf..06aa61e2 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/provider/RowSqlProvider.java @@ -116,7 +116,7 @@ public class RowSqlProvider { ProviderUtil.setSqlArgs(params, primaryValues); } - return DialectFactory.getDialect().forDeleteById(tableName, primaryKeys); + return DialectFactory.getDialect().forDeleteById(null, tableName, primaryKeys); } /** @@ -132,7 +132,7 @@ public class RowSqlProvider { Object[] primaryValues = ProviderUtil.getPrimaryValues(params); ProviderUtil.setSqlArgs(params, primaryValues); - return DialectFactory.getDialect().forDeleteBatchByIds(tableName, primaryKeys, primaryValues); + return DialectFactory.getDialect().forDeleteBatchByIds(null, tableName, primaryKeys, primaryValues); } @@ -265,7 +265,7 @@ public class RowSqlProvider { ProviderUtil.setSqlArgs(params, queryParams); - return DialectFactory.getDialect().forUpdateNumberAddByQuery(tableName, fieldName, value, queryWrapper); + return DialectFactory.getDialect().forUpdateNumberAddByQuery(null, tableName, fieldName, value, queryWrapper); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java index 83022002..28c1db8f 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java @@ -21,6 +21,7 @@ import com.mybatisflex.annotation.SetListener; import com.mybatisflex.annotation.UpdateListener; import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.FlexGlobalConfig; +import com.mybatisflex.core.dialect.IDialect; import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.javassist.ModifyAttrsRecord; import com.mybatisflex.core.mybatis.TypeHandlerObject; @@ -118,6 +119,14 @@ public class TableInfo { return tableName; } + public String getWrapSchemaAndTableName(IDialect dialect){ + if (StringUtil.isNotBlank(schema)){ + return dialect.wrap(dialect.getRealSchema(schema)) +"." + dialect.wrap(dialect.getRealTable(tableName)); + }else { + return dialect.wrap(dialect.getRealTable(tableName)); + } + } + public void setTableName(String tableName) { this.tableName = tableName; } diff --git a/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/service/impl/CacheableServiceImpl.java b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/service/impl/CacheableServiceImpl.java index 2191149b..2ddad0d5 100644 --- a/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/service/impl/CacheableServiceImpl.java +++ b/mybatis-flex-spring/src/main/java/com/mybatisflex/spring/service/impl/CacheableServiceImpl.java @@ -18,6 +18,7 @@ package com.mybatisflex.spring.service.impl; import com.mybatisflex.core.BaseMapper; import com.mybatisflex.core.exception.FlexExceptions; +import com.mybatisflex.core.query.QueryTable; import com.mybatisflex.core.query.QueryWrapper; import com.mybatisflex.core.service.IService; import com.mybatisflex.core.table.TableInfo; @@ -102,8 +103,8 @@ public class CacheableServiceImpl, T> implements IServic */ @Override public QueryWrapper query() { - String tableName = TableInfoFactory.ofMapperClass(getMapper().getClass()).getTableName(); - return QueryWrapper.create().from(tableName); + TableInfo tableInfo = TableInfoFactory.ofMapperClass(getMapper().getClass()); + return QueryWrapper.create().from(new QueryTable(tableInfo.getSchema(), tableInfo.getTableName())); } } \ No newline at end of file