添加逻辑删除的自定义内容配置功能 close #I6VVLH

This commit is contained in:
开源海哥 2023-04-16 12:12:05 +08:00
parent fdfbad3d0a
commit 4a61450591
3 changed files with 48 additions and 10 deletions

View File

@ -60,6 +60,13 @@ public class FlexGlobalConfig {
private Map<Class<?>, InsertListener> entityInsertListeners = new ConcurrentHashMap<>(); private Map<Class<?>, InsertListener> entityInsertListeners = new ConcurrentHashMap<>();
/**
* 逻辑删除的相关配置
*/
private Object normalValueOfLogicDelete = FlexConsts.LOGIC_DELETE_NORMAL;
private Object deletedValueOfLogicDelete = FlexConsts.LOGIC_DELETE_DELETED;
public DbType getDbType() { public DbType getDbType() {
return dbType; return dbType;
} }
@ -149,6 +156,22 @@ public class FlexGlobalConfig {
} }
public Object getNormalValueOfLogicDelete() {
return normalValueOfLogicDelete;
}
public void setNormalValueOfLogicDelete(Object normalValueOfLogicDelete) {
this.normalValueOfLogicDelete = normalValueOfLogicDelete;
}
public Object getDeletedValueOfLogicDelete() {
return deletedValueOfLogicDelete;
}
public void setDeletedValueOfLogicDelete(Object deletedValueOfLogicDelete) {
this.deletedValueOfLogicDelete = deletedValueOfLogicDelete;
}
public static ConcurrentHashMap<String, FlexGlobalConfig> getGlobalConfigs() { public static ConcurrentHashMap<String, FlexGlobalConfig> getGlobalConfigs() {
return globalConfigs; return globalConfigs;
} }
@ -157,6 +180,7 @@ public class FlexGlobalConfig {
FlexGlobalConfig.globalConfigs = globalConfigs; FlexGlobalConfig.globalConfigs = globalConfigs;
} }
/** /**
* 对应的是 注解 {@link com.mybatisflex.annotation.Id} 的配置 * 对应的是 注解 {@link com.mybatisflex.annotation.Id} 的配置
*/ */

View File

@ -15,7 +15,7 @@
*/ */
package com.mybatisflex.core.dialect; package com.mybatisflex.core.dialect;
import com.mybatisflex.core.FlexConsts; import com.mybatisflex.core.FlexGlobalConfig;
import com.mybatisflex.core.exception.FlexExceptions; import com.mybatisflex.core.exception.FlexExceptions;
import com.mybatisflex.core.query.*; import com.mybatisflex.core.query.*;
import com.mybatisflex.core.row.Row; import com.mybatisflex.core.row.Row;
@ -440,7 +440,7 @@ public class CommonsDialectImpl implements IDialect {
String[] primaryKeys = tableInfo.getPrimaryKeys(); String[] primaryKeys = tableInfo.getPrimaryKeys();
sql.append("UPDATE ").append(wrap(tableInfo.getTableName())).append(" SET "); sql.append("UPDATE ").append(wrap(tableInfo.getTableName())).append(" SET ");
sql.append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_DELETED); sql.append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicDeletedValue()));
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) {
@ -449,7 +449,7 @@ public class CommonsDialectImpl implements IDialect {
sql.append(wrap(primaryKeys[i])).append(" = ?"); sql.append(wrap(primaryKeys[i])).append(" = ?");
} }
sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_NORMAL); sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicNormalValue()));
//租户ID //租户ID
if (ArrayUtil.isNotEmpty(tenantIdArgs)) { if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
@ -459,6 +459,9 @@ public class CommonsDialectImpl implements IDialect {
return sql.toString(); return sql.toString();
} }
@Override @Override
public String forDeleteEntityBatchByIds(TableInfo tableInfo, Object[] primaryValues) { public String forDeleteEntityBatchByIds(TableInfo tableInfo, Object[] primaryValues) {
String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); String logicDeleteColumn = tableInfo.getLogicDeleteColumn();
@ -479,7 +482,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(wrap(tableInfo.getTableName()));
sql.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_DELETED); sql.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicDeletedValue()));
sql.append(" WHERE "); sql.append(" WHERE ");
sql.append("("); sql.append("(");
@ -511,7 +514,7 @@ public class CommonsDialectImpl implements IDialect {
} }
} }
sql.append(") AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_NORMAL); sql.append(") AND ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicNormalValue()));
if (ArrayUtil.isNotEmpty(tenantIdArgs)) { if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
sql.append(" AND ").append(wrap(tableInfo.getTenantIdColumn())).append(" IN ").append(buildQuestion(tenantIdArgs.length, true)); sql.append(" AND ").append(wrap(tableInfo.getTenantIdColumn())).append(" IN ").append(buildQuestion(tenantIdArgs.length, true));
@ -539,7 +542,7 @@ public class CommonsDialectImpl implements IDialect {
//ignore selectColumns //ignore selectColumns
StringBuilder sqlBuilder = new StringBuilder("UPDATE "); StringBuilder sqlBuilder = new StringBuilder("UPDATE ");
sqlBuilder.append(wrap(tableInfo.getTableName())); sqlBuilder.append(wrap(tableInfo.getTableName()));
sqlBuilder.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_DELETED); sqlBuilder.append(" SET ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicDeletedValue()));
buildJoinSql(sqlBuilder, queryWrapper, allTables); buildJoinSql(sqlBuilder, queryWrapper, allTables);
@ -594,7 +597,7 @@ public class CommonsDialectImpl implements IDialect {
//逻辑删除条件已删除的数据不能被修改 //逻辑删除条件已删除的数据不能被修改
String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); String logicDeleteColumn = tableInfo.getLogicDeleteColumn();
if (StringUtil.isNotBlank(logicDeleteColumn)) { if (StringUtil.isNotBlank(logicDeleteColumn)) {
sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_NORMAL); sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicNormalValue()));
} }
@ -676,7 +679,7 @@ public class CommonsDialectImpl implements IDialect {
//逻辑删除的情况下需要添加逻辑删除的条件 //逻辑删除的情况下需要添加逻辑删除的条件
String logicDeleteColumn = tableInfo.getLogicDeleteColumn(); String logicDeleteColumn = tableInfo.getLogicDeleteColumn();
if (StringUtil.isNotBlank(logicDeleteColumn)) { if (StringUtil.isNotBlank(logicDeleteColumn)) {
sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_NORMAL); sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicNormalValue()));
} }
//多租户 //多租户
@ -734,7 +737,7 @@ public class CommonsDialectImpl implements IDialect {
if (StringUtil.isNotBlank(logicDeleteColumn)) { if (StringUtil.isNotBlank(logicDeleteColumn)) {
sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(FlexConsts.LOGIC_DELETE_NORMAL); sql.append(" AND ").append(wrap(logicDeleteColumn)).append(" = ").append(wrap(getLogicNormalValue()));
} }
if (ArrayUtil.isNotEmpty(tenantIdArgs)) { if (ArrayUtil.isNotEmpty(tenantIdArgs)) {
@ -835,4 +838,13 @@ public class CommonsDialectImpl implements IDialect {
} }
protected String getLogicNormalValue() {
return FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete().toString();
}
protected String getLogicDeletedValue(){
return FlexGlobalConfig.getDefaultConfig().getDeletedValueOfLogicDelete().toString();
}
} }

View File

@ -493,7 +493,9 @@ public class TableInfo {
//逻辑删除条件已删除的数据不能被修改 //逻辑删除条件已删除的数据不能被修改
if (StringUtil.isNotBlank(logicDeleteColumn)) { if (StringUtil.isNotBlank(logicDeleteColumn)) {
queryWrapper.and(QueryCondition.create(tableName, logicDeleteColumn, QueryCondition.LOGIC_EQUALS, FlexConsts.LOGIC_DELETE_NORMAL)); // queryWrapper.and(QueryCondition.create(tableName, logicDeleteColumn, QueryCondition.LOGIC_EQUALS, FlexConsts.LOGIC_DELETE_NORMAL));
queryWrapper.and(QueryCondition.create(tableName, logicDeleteColumn, QueryCondition.LOGIC_EQUALS
, FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete()));
} }
//多租户 //多租户