!164 fix:插入时逻辑删除正常值初始化错误

Merge pull request !164 from 王帅/main
This commit is contained in:
Michael Yang 2023-07-21 23:29:16 +00:00 committed by Gitee
commit b54b90c85f
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
9 changed files with 62 additions and 39 deletions

View File

@ -20,7 +20,7 @@ public class Account {
@Column(isLogicDelete = true)
private Boolean isDelete;
//Getter Setter...
}
```
@ -33,8 +33,10 @@ accountMapper.deleteById(1);
MyBatis 执行的 SQL 如下:
```sql
UPDATE `tb_account` SET `is_delete` = 1
WHERE `id` = ? AND `is_delete` = 0
UPDATE `tb_account`
SET `is_delete` = 1
WHERE `id` = ?
AND `is_delete` = 0
```
可以看出,当执行 deleteById 时MyBatis 只是进行了 update 操作,而非 delete 操作。
@ -66,10 +68,12 @@ QueryWrapper query1 = QueryWrapper.create()
其执行的 SQL 如下:
```sql
SELECT * FROM `tb_account`
LEFT JOIN `tb_article` AS `a` ON `tb_account`.`id` = `a`.`account_id`
WHERE `tb_account`.`age` >= 10
AND `tb_account`.`is_delete` = 0 AND `a`.`is_delete` = 0
SELECT *
FROM `tb_account`
LEFT JOIN `tb_article` AS `a` ON `tb_account`.`id` = `a`.`account_id`
WHERE `tb_account`.`age` >= 10
AND `tb_account`.`is_delete` = 0
AND `a`.`is_delete` = 0
```
自动添加上 `tb_account.is_delete = 0 AND a.is_delete = 0` 条件。
@ -90,12 +94,14 @@ WHERE `tb_account`.`age` >= 10
其执行的 SQL 如下:
```sql
SELECT * FROM `tb_account`
LEFT JOIN (
SELECT * FROM `tb_article` WHERE `id` >= 100 AND `is_delete` = 0
) AS `a`
ON `tb_account`.`id` = a.id
WHERE `tb_account`.`age` >= 10 AND `tb_account`.`is_delete` = 0
SELECT *
FROM `tb_account`
LEFT JOIN (SELECT *
FROM `tb_article`
WHERE `id` >= 100 AND `is_delete` = 0) AS `a`
ON `tb_account`.`id` = a.id
WHERE `tb_account`.`age` >= 10
AND `tb_account`.`is_delete` = 0
```
@ -179,7 +185,7 @@ public interface LogicDeleteProcessor {
}
```
具体实现可以参考:[DefaultLogicDeleteProcessorImpl](https://gitee.com/mybatis-flex/mybatis-flex/blob/main/mybatis-flex-core/src/main/java/com/mybatisflex/core/logicdelete/DefaultLogicDeleteProcessorImpl.java)
具体实现可以参考:[DefaultLogicDeleteProcessor](https://gitee.com/mybatis-flex/mybatis-flex/blob/main/mybatis-flex-core/src/main/java/com/mybatisflex/core/logicdelete/impl/DefaultLogicDeleteProcessor.java)
## SpringBoot 支持
@ -195,6 +201,6 @@ public class MyConfiguration {
LogicDeleteProcessor processor = new ....;
return processor;
}
}
```
```

View File

@ -52,14 +52,14 @@ public abstract class AbstractLogicDeleteProcessor implements LogicDeleteProcess
*
* @return 未删除标记值
*/
protected abstract Object getLogicNormalValue();
public abstract Object getLogicNormalValue();
/**
* 获取逻辑删除列删除时标记值
*
* @return 删除时标记值
*/
protected abstract Object getLogicDeletedValue();
public abstract Object getLogicDeletedValue();
}

View File

@ -28,7 +28,7 @@ public interface LogicDeleteProcessor {
* 用户构建查询正常数据的条件
*
* @param logicColumn 逻辑删除列
* @param tableInfo
* @param tableInfo 表信息
* @param dialect 数据库方言
*/
String buildLogicNormalCondition(String logicColumn, TableInfo tableInfo, IDialect dialect);
@ -37,7 +37,7 @@ public interface LogicDeleteProcessor {
* 用户与构建删除数据时的内容
*
* @param logicColumn 逻辑删除列
* @param tableInfo
* @param tableInfo 表信息
* @param dialect 数据库方言
*/
String buildLogicDeletedSet(String logicColumn, TableInfo tableInfo, IDialect dialect);
@ -50,6 +50,20 @@ public interface LogicDeleteProcessor {
*/
void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo);
/**
* 获取逻辑删除列未删除标记值
*
* @return 未删除标记值
*/
Object getLogicNormalValue();
/**
* 获取逻辑删除列删除时标记值
*
* @return 删除时标记值
*/
Object getLogicDeletedValue();
}

View File

@ -30,7 +30,7 @@ public class BooleanLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
* 逻辑删除字段值为 {@code false} 表示数据未删除
*/
@Override
protected Object getLogicNormalValue() {
public Object getLogicNormalValue() {
return false;
}
@ -38,8 +38,8 @@ public class BooleanLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
* 逻辑删除字段值为 {@code true} 表示数据删除
*/
@Override
protected Object getLogicDeletedValue() {
public Object getLogicDeletedValue() {
return true;
}
}
}

View File

@ -45,7 +45,7 @@ public class DateTimeLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
* 逻辑删除字段值为 {@code null} 表示数据未删除
*/
@Override
protected Object getLogicNormalValue() {
public Object getLogicNormalValue() {
return null;
}
@ -53,8 +53,8 @@ public class DateTimeLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
* 逻辑删除字段值为 {@code NOW()} 表示数据删除并记录删除时间
*/
@Override
protected Object getLogicDeletedValue() {
public Object getLogicDeletedValue() {
return "NOW()";
}
}
}

View File

@ -37,7 +37,7 @@ public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
@Override
protected Object getLogicNormalValue() {
public Object getLogicNormalValue() {
Object normalValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
if (normalValueOfLogicDelete instanceof Number
|| normalValueOfLogicDelete instanceof Boolean) {
@ -48,7 +48,7 @@ public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
@Override
protected Object getLogicDeletedValue() {
public Object getLogicDeletedValue() {
Object deletedValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getDeletedValueOfLogicDelete();
if (deletedValueOfLogicDelete instanceof Number
|| deletedValueOfLogicDelete instanceof Boolean) {

View File

@ -30,7 +30,7 @@ public class IntegerLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
* 逻辑删除字段值为 {@code 0} 表示数据未删除
*/
@Override
protected Object getLogicNormalValue() {
public Object getLogicNormalValue() {
return 0;
}
@ -38,8 +38,8 @@ public class IntegerLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
* 逻辑删除字段值为 {@code 1} 表示数据删除
*/
@Override
protected Object getLogicDeletedValue() {
public Object getLogicDeletedValue() {
return 1;
}
}
}

View File

@ -30,7 +30,7 @@ public class TimeStampLogicDeleteProcessor extends AbstractLogicDeleteProcessor
* 逻辑删除字段值为 {@code 0} 表示数据未删除
*/
@Override
protected Object getLogicNormalValue() {
public Object getLogicNormalValue() {
return 0;
}
@ -38,8 +38,8 @@ public class TimeStampLogicDeleteProcessor extends AbstractLogicDeleteProcessor
* 逻辑删除字段值为 {@code NOW()} 表示数据删除并记录删除时时间戳
*/
@Override
protected Object getLogicDeletedValue() {
public Object getLogicDeletedValue() {
return System.currentTimeMillis();
}
}
}

View File

@ -1178,12 +1178,15 @@ public class TableInfo {
}
MetaObject metaObject = EntityMetaObject.forObject(entityObject, reflectorFactory);
Object columnValue = getPropertyValue(metaObject, columnInfoMapping.get(logicDeleteColumn).property);
ColumnInfo logicDeleteColumn = columnInfoMapping.get(this.logicDeleteColumn);
Object columnValue = getPropertyValue(metaObject, logicDeleteColumn.property);
if (columnValue == null) {
String property = columnInfoMapping.get(logicDeleteColumn).property;
Class<?> setterType = metaObject.getSetterType(property);
Object normalValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
metaObject.setValue(property, ConvertUtil.convert(normalValueOfLogicDelete, setterType));
Object normalValueOfLogicDelete = LogicDeleteManager.getProcessor().getLogicNormalValue();
if (normalValueOfLogicDelete != null) {
String property = logicDeleteColumn.property;
Class<?> setterType = metaObject.getSetterType(property);
metaObject.setValue(property, ConvertUtil.convert(normalValueOfLogicDelete, setterType));
}
}
}