mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fixed: dialect generate insert or update sql without schema.
This commit is contained in:
parent
532aea69a3
commit
cc495d461b
@ -40,9 +40,9 @@ public interface IDialect {
|
|||||||
|
|
||||||
String forInsertBatchWithFirstRowColumns(String tableName, List<Row> rows);
|
String forInsertBatchWithFirstRowColumns(String tableName, List<Row> 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);
|
String forDeleteByQuery(QueryWrapper queryWrapper);
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ public interface IDialect {
|
|||||||
|
|
||||||
String forUpdateEntityByQuery(TableInfo tableInfo, Object entity, boolean ignoreNulls, QueryWrapper queryWrapper);
|
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);
|
String forSelectOneEntityById(TableInfo tableInfo);
|
||||||
|
|
||||||
|
|||||||
@ -119,9 +119,12 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String forDeleteById(String tableName, String[] primaryKeys) {
|
public String forDeleteById(String schema, String tableName, String[] primaryKeys) {
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("DELETE FROM ");
|
sql.append("DELETE FROM ");
|
||||||
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
|
sql.append(wrap(getRealSchema(schema))).append(".");
|
||||||
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(getRealTable(tableName)));
|
||||||
sql.append(" WHERE ");
|
sql.append(" WHERE ");
|
||||||
for (int i = 0; i < primaryKeys.length; i++) {
|
for (int i = 0; i < primaryKeys.length; i++) {
|
||||||
@ -135,9 +138,12 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@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();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("DELETE FROM ");
|
sql.append("DELETE FROM ");
|
||||||
|
if (StringUtil.isNotBlank(schema)) {
|
||||||
|
sql.append(wrap(getRealSchema(schema))).append(".");
|
||||||
|
}
|
||||||
sql.append(wrap(getRealTable(tableName)));
|
sql.append(wrap(getRealTable(tableName)));
|
||||||
sql.append(" WHERE ");
|
sql.append(" WHERE ");
|
||||||
|
|
||||||
@ -366,7 +372,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
@Override
|
@Override
|
||||||
public String forInsertEntity(TableInfo tableInfo, Object entity, boolean ignoreNulls) {
|
public String forInsertEntity(TableInfo tableInfo, Object entity, boolean ignoreNulls) {
|
||||||
StringBuilder sql = new StringBuilder();
|
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);
|
String[] insertColumns = tableInfo.obtainInsertColumns(entity, ignoreNulls);
|
||||||
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
Map<String, String> onInsertColumns = tableInfo.getOnInsertColumns();
|
||||||
@ -391,7 +397,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
@Override
|
@Override
|
||||||
public String forInsertEntityBatch(TableInfo tableInfo, List<Object> entities) {
|
public String forInsertEntityBatch(TableInfo tableInfo, List<Object> entities) {
|
||||||
StringBuilder sql = new StringBuilder();
|
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[] insertColumns = tableInfo.obtainInsertColumns(null, false);
|
||||||
String[] warpedInsertColumns = new String[insertColumns.length];
|
String[] warpedInsertColumns = new String[insertColumns.length];
|
||||||
for (int i = 0; i < insertColumns.length; i++) {
|
for (int i = 0; i < insertColumns.length; i++) {
|
||||||
@ -426,7 +432,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
Object[] tenantIdArgs = tableInfo.buildTenantIdArgs();
|
||||||
//正常删除
|
//正常删除
|
||||||
if (StringUtil.isBlank(logicDeleteColumn)) {
|
if (StringUtil.isBlank(logicDeleteColumn)) {
|
||||||
String deleteByIdSql = forDeleteById(tableInfo.getTableName(), tableInfo.getPrimaryKeys());
|
String deleteByIdSql = forDeleteById(tableInfo.getSchema(), tableInfo.getTableName(), tableInfo.getPrimaryKeys());
|
||||||
|
|
||||||
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
||||||
deleteByIdSql += " AND " + wrap(tableInfo.getTenantIdColumn()) + " IN " + buildQuestion(tenantIdArgs.length, true);
|
deleteByIdSql += " AND " + wrap(tableInfo.getTenantIdColumn()) + " IN " + buildQuestion(tenantIdArgs.length, true);
|
||||||
@ -438,7 +444,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
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(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue());
|
||||||
sql.append(" WHERE ");
|
sql.append(" WHERE ");
|
||||||
for (int i = 0; i < primaryKeys.length; i++) {
|
for (int i = 0; i < primaryKeys.length; i++) {
|
||||||
@ -466,7 +472,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
//正常删除
|
//正常删除
|
||||||
if (StringUtil.isBlank(logicDeleteColumn)) {
|
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)) {
|
if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
|
||||||
@ -478,7 +484,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
StringBuilder sql = new StringBuilder();
|
StringBuilder sql = new StringBuilder();
|
||||||
sql.append("UPDATE ");
|
sql.append("UPDATE ");
|
||||||
sql.append(wrap(tableInfo.getTableName()));
|
sql.append(tableInfo.getWrapSchemaAndTableName(this));
|
||||||
sql.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue());
|
sql.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue());
|
||||||
sql.append(" WHERE ");
|
sql.append(" WHERE ");
|
||||||
sql.append("(");
|
sql.append("(");
|
||||||
@ -538,7 +544,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
//ignore selectColumns
|
//ignore selectColumns
|
||||||
StringBuilder sqlBuilder = new StringBuilder("UPDATE ").append(forHint(CPI.getHint(queryWrapper)));
|
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());
|
sqlBuilder.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(getLogicDeletedValue());
|
||||||
|
|
||||||
|
|
||||||
@ -562,7 +568,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
Set<String> modifyAttrs = tableInfo.obtainUpdateColumns(entity, ignoreNulls, false);
|
Set<String> modifyAttrs = tableInfo.obtainUpdateColumns(entity, ignoreNulls, false);
|
||||||
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
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(", ");
|
StringJoiner stringJoiner = new StringJoiner(", ");
|
||||||
|
|
||||||
@ -627,7 +633,8 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
Set<String> modifyAttrs = tableInfo.obtainUpdateColumns(entity, ignoreNulls, true);
|
Set<String> 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(", ");
|
StringJoiner stringJoiner = new StringJoiner(", ");
|
||||||
|
|
||||||
@ -670,9 +677,13 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@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();
|
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()));
|
sql.append(wrap(fieldName)).append("=").append(wrap(fieldName)).append(value.intValue() >= 0 ? " + " : " - ").append(Math.abs(value.longValue()));
|
||||||
|
|
||||||
String whereConditionSql = buildWhereConditionSql(queryWrapper);
|
String whereConditionSql = buildWhereConditionSql(queryWrapper);
|
||||||
@ -698,7 +709,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
@Override
|
@Override
|
||||||
public String forSelectOneEntityById(TableInfo tableInfo) {
|
public String forSelectOneEntityById(TableInfo tableInfo) {
|
||||||
StringBuilder sql = buildSelectColumnSql(null, null, null);
|
StringBuilder sql = buildSelectColumnSql(null, null, null);
|
||||||
sql.append(" FROM ").append(wrap(tableInfo.getTableName()));
|
sql.append(" FROM ").append(tableInfo.getWrapSchemaAndTableName(this));
|
||||||
sql.append(" WHERE ");
|
sql.append(" WHERE ");
|
||||||
String[] pKeys = tableInfo.getPrimaryKeys();
|
String[] pKeys = tableInfo.getPrimaryKeys();
|
||||||
for (int i = 0; i < pKeys.length; i++) {
|
for (int i = 0; i < pKeys.length; i++) {
|
||||||
@ -727,7 +738,7 @@ public class CommonsDialectImpl implements IDialect {
|
|||||||
@Override
|
@Override
|
||||||
public String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues) {
|
public String forSelectEntityListByIds(TableInfo tableInfo, Object[] primaryValues) {
|
||||||
StringBuilder sql = buildSelectColumnSql(null, tableInfo.getDefaultQueryColumn(), null);
|
StringBuilder sql = buildSelectColumnSql(null, tableInfo.getDefaultQueryColumn(), null);
|
||||||
sql.append(" FROM ").append(wrap(tableInfo.getTableName()));
|
sql.append(" FROM ").append(tableInfo.getWrapSchemaAndTableName(this));
|
||||||
sql.append(" WHERE ");
|
sql.append(" WHERE ");
|
||||||
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
String[] primaryKeys = tableInfo.getPrimaryKeys();
|
||||||
|
|
||||||
|
|||||||
@ -270,7 +270,7 @@ public class EntitySqlProvider {
|
|||||||
|
|
||||||
ProviderUtil.setSqlArgs(params, queryParams);
|
ProviderUtil.setSqlArgs(params, queryParams);
|
||||||
|
|
||||||
return DialectFactory.getDialect().forUpdateNumberAddByQuery(tableInfo.getTableName(), fieldName, value, queryWrapper);
|
return DialectFactory.getDialect().forUpdateNumberAddByQuery(tableInfo.getSchema(), tableInfo.getTableName(), fieldName, value, queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -116,7 +116,7 @@ public class RowSqlProvider {
|
|||||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
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);
|
Object[] primaryValues = ProviderUtil.getPrimaryValues(params);
|
||||||
|
|
||||||
ProviderUtil.setSqlArgs(params, primaryValues);
|
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);
|
ProviderUtil.setSqlArgs(params, queryParams);
|
||||||
|
|
||||||
return DialectFactory.getDialect().forUpdateNumberAddByQuery(tableName, fieldName, value, queryWrapper);
|
return DialectFactory.getDialect().forUpdateNumberAddByQuery(null, tableName, fieldName, value, queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import com.mybatisflex.annotation.SetListener;
|
|||||||
import com.mybatisflex.annotation.UpdateListener;
|
import com.mybatisflex.annotation.UpdateListener;
|
||||||
import com.mybatisflex.core.FlexConsts;
|
import com.mybatisflex.core.FlexConsts;
|
||||||
import com.mybatisflex.core.FlexGlobalConfig;
|
import com.mybatisflex.core.FlexGlobalConfig;
|
||||||
|
import com.mybatisflex.core.dialect.IDialect;
|
||||||
import com.mybatisflex.core.exception.FlexExceptions;
|
import com.mybatisflex.core.exception.FlexExceptions;
|
||||||
import com.mybatisflex.core.javassist.ModifyAttrsRecord;
|
import com.mybatisflex.core.javassist.ModifyAttrsRecord;
|
||||||
import com.mybatisflex.core.mybatis.TypeHandlerObject;
|
import com.mybatisflex.core.mybatis.TypeHandlerObject;
|
||||||
@ -118,6 +119,14 @@ public class TableInfo {
|
|||||||
return tableName;
|
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) {
|
public void setTableName(String tableName) {
|
||||||
this.tableName = tableName;
|
this.tableName = tableName;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,6 +18,7 @@ package com.mybatisflex.spring.service.impl;
|
|||||||
|
|
||||||
import com.mybatisflex.core.BaseMapper;
|
import com.mybatisflex.core.BaseMapper;
|
||||||
import com.mybatisflex.core.exception.FlexExceptions;
|
import com.mybatisflex.core.exception.FlexExceptions;
|
||||||
|
import com.mybatisflex.core.query.QueryTable;
|
||||||
import com.mybatisflex.core.query.QueryWrapper;
|
import com.mybatisflex.core.query.QueryWrapper;
|
||||||
import com.mybatisflex.core.service.IService;
|
import com.mybatisflex.core.service.IService;
|
||||||
import com.mybatisflex.core.table.TableInfo;
|
import com.mybatisflex.core.table.TableInfo;
|
||||||
@ -102,8 +103,8 @@ public class CacheableServiceImpl<M extends BaseMapper<T>, T> implements IServic
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public QueryWrapper query() {
|
public QueryWrapper query() {
|
||||||
String tableName = TableInfoFactory.ofMapperClass(getMapper().getClass()).getTableName();
|
TableInfo tableInfo = TableInfoFactory.ofMapperClass(getMapper().getClass());
|
||||||
return QueryWrapper.create().from(tableName);
|
return QueryWrapper.create().from(new QueryTable(tableInfo.getSchema(), tableInfo.getTableName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user