From ca9ef2380d9cfa6c56f41834341cf971fe198fdb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Wed, 23 Aug 2023 09:35:35 +0800 Subject: [PATCH] doc: update docs --- docs/zh/core/logic-delete.md | 57 ++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/docs/zh/core/logic-delete.md b/docs/zh/core/logic-delete.md index 8c264bbb..3bac4427 100644 --- a/docs/zh/core/logic-delete.md +++ b/docs/zh/core/logic-delete.md @@ -189,6 +189,63 @@ public interface LogicDeleteProcessor { 具体实现可以参考:[DefaultLogicDeleteProcessor](https://gitee.com/mybatis-flex/mybatis-flex/blob/main/mybatis-flex-core/src/main/java/com/mybatisflex/core/logicdelete/impl/DefaultLogicDeleteProcessor.java) +## 逻辑删除时,更新删除时间和删除人 + +有许多用户有这样的需求: + +>在进行逻辑删除数据时,需要更新当前表的其他字段,比如 `删除时间`、`删除人`。 + +针对这种场景,目前有两个方案: + +- **方案1:重新 IService 的 removeById 方法** + +先更新 `deleteTime` 和 `deleteUserId`,然后再进行逻辑删除。同时需要保证这两个方法在同一个事务里进行, +如下代码: + +```java +@Component +public class AccountService extends ServiceImpl implements IService { + + //重写 Service 的 removeById 方法 + @Override + public boolean removeById(Serializable id) { + return Db.txWithResult(() -> { + Account account = UpdateEntity.of(Account.class); + account.setId((Long) id); + account.setDeleteTime(new Date()); + account.setDeleteUserId("..."); + + super.updateById(account); + return super.removeById(id); + }); + } +} +``` + +- **方案2:自定义逻辑删除处理功能** + +在自定义的逻辑删除里,添加 `deleteTime` 和 `deleteUserId` 字段的更新,如下代码: + +```java +public class MyLogicDeleteProcessor implements LogicDeleteProcessor { + + @Override + public String buildLogicDeletedSet(String logicColumn, TableInfo tableInfo, IDialect dialect) { + + String sql = dialect.wrap(logicColumn) + EQUALS + prepareValue(getLogicDeletedValue()); + + //扩展一下软删除的sql语句,增加删除时间和删除人。 + sql += "," + dialect.wrap('deleteTime') + EQUALS + "now()"; + sql += "," + dialect.wrap('deleteUserId') + EQUALS + SpringConextUtil.getUserId(); + + return sql; + } +} +``` + +也可以参考 issue:https://gitee.com/mybatis-flex/mybatis-flex/issues/I7TT51 + + ## SpringBoot 支持 在 SpringBoot 项目下,直接通过 `@Configuration` 即可使用: