mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-08 01:28:24 +08:00
commit
b54b90c85f
@ -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`
|
||||
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
|
||||
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`
|
||||
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
|
||||
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 支持
|
||||
|
||||
@ -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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ public class BooleanLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
* 逻辑删除字段值为 {@code false} 表示数据未删除。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicNormalValue() {
|
||||
public Object getLogicNormalValue() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ public class BooleanLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
* 逻辑删除字段值为 {@code true} 表示数据删除。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicDeletedValue() {
|
||||
public Object getLogicDeletedValue() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@ -45,7 +45,7 @@ public class DateTimeLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
* 逻辑删除字段值为 {@code null} 表示数据未删除。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicNormalValue() {
|
||||
public Object getLogicNormalValue() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@ -53,7 +53,7 @@ public class DateTimeLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
* 逻辑删除字段值为 {@code NOW()} 表示数据删除,并记录删除时间。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicDeletedValue() {
|
||||
public Object getLogicDeletedValue() {
|
||||
return "NOW()";
|
||||
}
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -30,7 +30,7 @@ public class IntegerLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
* 逻辑删除字段值为 {@code 0} 表示数据未删除。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicNormalValue() {
|
||||
public Object getLogicNormalValue() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ public class IntegerLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
||||
* 逻辑删除字段值为 {@code 1} 表示数据删除。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicDeletedValue() {
|
||||
public Object getLogicDeletedValue() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
@ -30,7 +30,7 @@ public class TimeStampLogicDeleteProcessor extends AbstractLogicDeleteProcessor
|
||||
* 逻辑删除字段值为 {@code 0} 表示数据未删除。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicNormalValue() {
|
||||
public Object getLogicNormalValue() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@ public class TimeStampLogicDeleteProcessor extends AbstractLogicDeleteProcessor
|
||||
* 逻辑删除字段值为 {@code NOW()} 表示数据删除,并记录删除时时间戳。
|
||||
*/
|
||||
@Override
|
||||
protected Object getLogicDeletedValue() {
|
||||
public Object getLogicDeletedValue() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
|
||||
@ -1178,14 +1178,17 @@ 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;
|
||||
Object normalValueOfLogicDelete = LogicDeleteManager.getProcessor().getLogicNormalValue();
|
||||
if (normalValueOfLogicDelete != null) {
|
||||
String property = logicDeleteColumn.property;
|
||||
Class<?> setterType = metaObject.getSetterType(property);
|
||||
Object normalValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
||||
metaObject.setValue(property, ConvertUtil.convert(normalValueOfLogicDelete, setterType));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private static final Map<Class<?>, List<InsertListener>> insertListenerCache = new ConcurrentHashMap<>();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user