mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-08 01:28:24 +08:00
commit
b54b90c85f
@ -20,7 +20,7 @@ public class Account {
|
|||||||
|
|
||||||
@Column(isLogicDelete = true)
|
@Column(isLogicDelete = true)
|
||||||
private Boolean isDelete;
|
private Boolean isDelete;
|
||||||
|
|
||||||
//Getter Setter...
|
//Getter Setter...
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
@ -33,8 +33,10 @@ accountMapper.deleteById(1);
|
|||||||
MyBatis 执行的 SQL 如下:
|
MyBatis 执行的 SQL 如下:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
UPDATE `tb_account` SET `is_delete` = 1
|
UPDATE `tb_account`
|
||||||
WHERE `id` = ? AND `is_delete` = 0
|
SET `is_delete` = 1
|
||||||
|
WHERE `id` = ?
|
||||||
|
AND `is_delete` = 0
|
||||||
```
|
```
|
||||||
可以看出,当执行 deleteById 时,MyBatis 只是进行了 update 操作,而非 delete 操作。
|
可以看出,当执行 deleteById 时,MyBatis 只是进行了 update 操作,而非 delete 操作。
|
||||||
|
|
||||||
@ -66,10 +68,12 @@ QueryWrapper query1 = QueryWrapper.create()
|
|||||||
其执行的 SQL 如下:
|
其执行的 SQL 如下:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM `tb_account`
|
SELECT *
|
||||||
LEFT JOIN `tb_article` AS `a` ON `tb_account`.`id` = `a`.`account_id`
|
FROM `tb_account`
|
||||||
WHERE `tb_account`.`age` >= 10
|
LEFT JOIN `tb_article` AS `a` ON `tb_account`.`id` = `a`.`account_id`
|
||||||
AND `tb_account`.`is_delete` = 0 AND `a`.`is_delete` = 0
|
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` 条件。
|
自动添加上 `tb_account.is_delete = 0 AND a.is_delete = 0` 条件。
|
||||||
|
|
||||||
@ -90,12 +94,14 @@ WHERE `tb_account`.`age` >= 10
|
|||||||
其执行的 SQL 如下:
|
其执行的 SQL 如下:
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
SELECT * FROM `tb_account`
|
SELECT *
|
||||||
LEFT JOIN (
|
FROM `tb_account`
|
||||||
SELECT * FROM `tb_article` WHERE `id` >= 100 AND `is_delete` = 0
|
LEFT JOIN (SELECT *
|
||||||
) AS `a`
|
FROM `tb_article`
|
||||||
ON `tb_account`.`id` = a.id
|
WHERE `id` >= 100 AND `is_delete` = 0) AS `a`
|
||||||
WHERE `tb_account`.`age` >= 10 AND `tb_account`.`is_delete` = 0
|
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 支持
|
## SpringBoot 支持
|
||||||
@ -195,6 +201,6 @@ public class MyConfiguration {
|
|||||||
LogicDeleteProcessor processor = new ....;
|
LogicDeleteProcessor processor = new ....;
|
||||||
return processor;
|
return processor;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|||||||
@ -52,14 +52,14 @@ public abstract class AbstractLogicDeleteProcessor implements LogicDeleteProcess
|
|||||||
*
|
*
|
||||||
* @return 未删除标记值
|
* @return 未删除标记值
|
||||||
*/
|
*/
|
||||||
protected abstract Object getLogicNormalValue();
|
public abstract Object getLogicNormalValue();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取逻辑删除列删除时标记值。
|
* 获取逻辑删除列删除时标记值。
|
||||||
*
|
*
|
||||||
* @return 删除时标记值
|
* @return 删除时标记值
|
||||||
*/
|
*/
|
||||||
protected abstract Object getLogicDeletedValue();
|
public abstract Object getLogicDeletedValue();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -28,7 +28,7 @@ public interface LogicDeleteProcessor {
|
|||||||
* 用户构建查询正常数据的条件。
|
* 用户构建查询正常数据的条件。
|
||||||
*
|
*
|
||||||
* @param logicColumn 逻辑删除列
|
* @param logicColumn 逻辑删除列
|
||||||
* @param tableInfo
|
* @param tableInfo 表信息
|
||||||
* @param dialect 数据库方言
|
* @param dialect 数据库方言
|
||||||
*/
|
*/
|
||||||
String buildLogicNormalCondition(String logicColumn, TableInfo tableInfo, IDialect dialect);
|
String buildLogicNormalCondition(String logicColumn, TableInfo tableInfo, IDialect dialect);
|
||||||
@ -37,7 +37,7 @@ public interface LogicDeleteProcessor {
|
|||||||
* 用户与构建删除数据时的内容。
|
* 用户与构建删除数据时的内容。
|
||||||
*
|
*
|
||||||
* @param logicColumn 逻辑删除列
|
* @param logicColumn 逻辑删除列
|
||||||
* @param tableInfo
|
* @param tableInfo 表信息
|
||||||
* @param dialect 数据库方言
|
* @param dialect 数据库方言
|
||||||
*/
|
*/
|
||||||
String buildLogicDeletedSet(String logicColumn, TableInfo tableInfo, IDialect dialect);
|
String buildLogicDeletedSet(String logicColumn, TableInfo tableInfo, IDialect dialect);
|
||||||
@ -50,6 +50,20 @@ public interface LogicDeleteProcessor {
|
|||||||
*/
|
*/
|
||||||
void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo);
|
void buildQueryCondition(QueryWrapper queryWrapper, TableInfo tableInfo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取逻辑删除列未删除标记值。
|
||||||
|
*
|
||||||
|
* @return 未删除标记值
|
||||||
|
*/
|
||||||
|
Object getLogicNormalValue();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取逻辑删除列删除时标记值。
|
||||||
|
*
|
||||||
|
* @return 删除时标记值
|
||||||
|
*/
|
||||||
|
Object getLogicDeletedValue();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public class BooleanLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
* 逻辑删除字段值为 {@code false} 表示数据未删除。
|
* 逻辑删除字段值为 {@code false} 表示数据未删除。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicNormalValue() {
|
public Object getLogicNormalValue() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,8 +38,8 @@ public class BooleanLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
* 逻辑删除字段值为 {@code true} 表示数据删除。
|
* 逻辑删除字段值为 {@code true} 表示数据删除。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicDeletedValue() {
|
public Object getLogicDeletedValue() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,7 +45,7 @@ public class DateTimeLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
* 逻辑删除字段值为 {@code null} 表示数据未删除。
|
* 逻辑删除字段值为 {@code null} 表示数据未删除。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicNormalValue() {
|
public Object getLogicNormalValue() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,8 +53,8 @@ public class DateTimeLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
* 逻辑删除字段值为 {@code NOW()} 表示数据删除,并记录删除时间。
|
* 逻辑删除字段值为 {@code NOW()} 表示数据删除,并记录删除时间。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicDeletedValue() {
|
public Object getLogicDeletedValue() {
|
||||||
return "NOW()";
|
return "NOW()";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicNormalValue() {
|
public Object getLogicNormalValue() {
|
||||||
Object normalValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
Object normalValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
||||||
if (normalValueOfLogicDelete instanceof Number
|
if (normalValueOfLogicDelete instanceof Number
|
||||||
|| normalValueOfLogicDelete instanceof Boolean) {
|
|| normalValueOfLogicDelete instanceof Boolean) {
|
||||||
@ -48,7 +48,7 @@ public class DefaultLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicDeletedValue() {
|
public Object getLogicDeletedValue() {
|
||||||
Object deletedValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getDeletedValueOfLogicDelete();
|
Object deletedValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getDeletedValueOfLogicDelete();
|
||||||
if (deletedValueOfLogicDelete instanceof Number
|
if (deletedValueOfLogicDelete instanceof Number
|
||||||
|| deletedValueOfLogicDelete instanceof Boolean) {
|
|| deletedValueOfLogicDelete instanceof Boolean) {
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public class IntegerLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
* 逻辑删除字段值为 {@code 0} 表示数据未删除。
|
* 逻辑删除字段值为 {@code 0} 表示数据未删除。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicNormalValue() {
|
public Object getLogicNormalValue() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,8 +38,8 @@ public class IntegerLogicDeleteProcessor extends AbstractLogicDeleteProcessor {
|
|||||||
* 逻辑删除字段值为 {@code 1} 表示数据删除。
|
* 逻辑删除字段值为 {@code 1} 表示数据删除。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicDeletedValue() {
|
public Object getLogicDeletedValue() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public class TimeStampLogicDeleteProcessor extends AbstractLogicDeleteProcessor
|
|||||||
* 逻辑删除字段值为 {@code 0} 表示数据未删除。
|
* 逻辑删除字段值为 {@code 0} 表示数据未删除。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicNormalValue() {
|
public Object getLogicNormalValue() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,8 +38,8 @@ public class TimeStampLogicDeleteProcessor extends AbstractLogicDeleteProcessor
|
|||||||
* 逻辑删除字段值为 {@code NOW()} 表示数据删除,并记录删除时时间戳。
|
* 逻辑删除字段值为 {@code NOW()} 表示数据删除,并记录删除时时间戳。
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Object getLogicDeletedValue() {
|
public Object getLogicDeletedValue() {
|
||||||
return System.currentTimeMillis();
|
return System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1178,12 +1178,15 @@ public class TableInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MetaObject metaObject = EntityMetaObject.forObject(entityObject, reflectorFactory);
|
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) {
|
if (columnValue == null) {
|
||||||
String property = columnInfoMapping.get(logicDeleteColumn).property;
|
Object normalValueOfLogicDelete = LogicDeleteManager.getProcessor().getLogicNormalValue();
|
||||||
Class<?> setterType = metaObject.getSetterType(property);
|
if (normalValueOfLogicDelete != null) {
|
||||||
Object normalValueOfLogicDelete = FlexGlobalConfig.getDefaultConfig().getNormalValueOfLogicDelete();
|
String property = logicDeleteColumn.property;
|
||||||
metaObject.setValue(property, ConvertUtil.convert(normalValueOfLogicDelete, setterType));
|
Class<?> setterType = metaObject.getSetterType(property);
|
||||||
|
metaObject.setValue(property, ConvertUtil.convert(normalValueOfLogicDelete, setterType));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user