--- title: "15-逻辑删除mybatis-plus配置原理" created: 2025-12-02 tags: - 项目 aliases: - 逻辑删除mybatis-plus配置原理 --- # 逻辑删除mybatis-plus配置原理 在数据库设计中,逻辑删除是一种不直接删除数据的方式,而是通过在表中添加一个标记字段(例如 `isDelete` 字段),来区分数据是否被删除。逻辑删除主要用于在不影响数据完整性的前提下,实现对数据的软删除,以便于后续的数据恢复或历史数据的审计。 在 `MyBatis-Plus` 中,逻辑删除功能通过全局配置实现,可以对数据库查询和更新操作进行自动处理。你的配置文件中设置了 `isDelete` 字段作为逻辑删除标记字段,并指定了两个值:`1` 表示逻辑删除,`0` 表示未删除。以下是这个配置的作用和原理: ### 配置解释 ```yaml mybatis-plus: global-config: db-config: logic-delete-field: isDelete # 设置逻辑删除的标记字段 logic-delete-value: 1 # 标记已删除的值 logic-not-delete-value: 0 # 标记未删除的值 ``` 1. `logic-delete-field`: 配置全局逻辑删除字段名(这里是 `isDelete`),这个字段将作为逻辑删除的标记字段,所有涉及逻辑删除的表都需要包含该字段。 2. `logic-delete-value`: 设置逻辑已删除的值(`1`),表示当 `isDelete` 字段为 `1` 时,数据为逻辑删除状态。 3. `logic-not-delete-value`: 设置逻辑未删除的值(`0`),表示当 `isDelete` 字段为 `0` 时,数据为正常状态。 ### 逻辑删除的实现原理 在添加了逻辑删除配置后,`MyBatis-Plus` 会自动在 SQL 查询中加入 `isDelete = 0` 的条件。具体来说: - **查询过滤**:当我们执行查询时(例如 `selectOne` 或 `selectList`),MyBatis-Plus 会自动在 SQL 中添加 `WHERE isDelete = 0` 的条件,从而过滤掉逻辑删除的记录。这就保证了查询结果中不会包含逻辑删除的数据。 - **更新和删除操作**:如果执行删除操作(例如 `deleteById`),MyBatis-Plus 会将 `isDelete` 字段设置为 `1`,而不是物理删除记录,这样记录依然保留在数据库中,只不过在后续查询时不会被选出来。 ### 原理说明 配置了逻辑删除的字段后,MyBatis-Plus 在生成 SQL 语句时,会依据逻辑删除的规则自动添加条件: 1. **查询操作**:`MyBatis-Plus` 会在查询条件中自动增加 `isDelete = 0`,实现了逻辑删除的过滤。例如,原本的查询语句: ```text SELECT * FROM user WHERE userAccount = ? AND userPassword = ? ``` 在启用逻辑删除后,自动转变为: ```text SELECT * FROM user WHERE userAccount = ? AND userPassword = ? AND isDelete = 0 ``` 2. **删除操作**:当调用 `deleteById` 方法时,`MyBatis-Plus` 并不会直接删除记录,而是生成一条更新语句,将 `isDelete` 字段设置为 `1`,标记为逻辑删除。例如,以下物理删除语句: ```text DELETE FROM user WHERE id = ? ``` 会被转换为逻辑删除语句: ```text UPDATE user SET isDelete = 1 WHERE id = ? ``` ### 应用示例 ```java // 查询未逻辑删除的用户 QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("userAccount", userAccount); queryWrapper.eq("userPassword", encryptPassword); User user = userMapper.selectOne(queryWrapper); // 自动过滤 isDelete = 1 的记录 ``` ### 小结 通过对 `MyBatis-Plus` 的全局配置进行逻辑删除设置,可以简化代码,避免手动添加过滤条件,从而实现数据的软删除,提升系统的安全性和数据管理的灵活性 --- **项目分区导航**:⬅️ [[14-业务逻辑|14-业务逻辑]] | 15-逻辑删除mybatis-plus配置原理 | ➡️ [[16-优化封装|16-优化封装]]