mybatis-plus中的逻辑删除
发布人:shili8
发布时间:2024-12-28 11:56
阅读次数:0
**MyBatis-Plus 逻辑删除**
在实际开发中,数据的删除操作往往会涉及到物理删除或逻辑删除。物理删除是直接从数据库中删除数据,而逻辑删除则是通过设置一个标志位(如`deleted_at`)来表示数据已经被删除,而不真正删除数据。这篇文章将介绍MyBatis-Plus中的逻辑删除机制。
### 逻辑删除的基本概念逻辑删除是一种在数据库中保留历史数据的方法,通过设置一个标志位(如`deleted_at`)来表示数据已经被删除,而不真正删除数据。这种方式可以避免物理删除带来的风险,如数据丢失、历史数据无法追溯等。
### MyBatis-Plus 逻辑删除实现MyBatis-Plus提供了一个名为`LogicalDelete`的注解,用于标记需要逻辑删除的字段。同时,还提供了一个`UpdateLogic`接口,用于定义逻辑删除的更新规则。
#### LogicalDelete 注解
java@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface LogicalDelete { // 逻辑删除的时间戳字段名 String value() default "deleted_at"; }
#### UpdateLogic 接口
javapublic interface UpdateLogic{ /** * 更新逻辑删除标志位 * * @param entity 实体对象 */ void update(T entity); }
#### 逻辑删除的实现类
java@Componentpublic class DefaultUpdateLogic implements UpdateLogic{ @Override public void update(LogicalDeleteEntity entity) { // 更新逻辑删除标志位 entity.setDeletedAt(new Date()); } }
#### 逻辑删除的配置
java@Configurationpublic class MybatisPlusConfig implements InterceptorRegistration { @Bean public Interceptor interceptor() { return new LogicalDeleteInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { // 注册逻辑删除拦截器 registry.addInterceptor(interceptor()); } }
#### 逻辑删除的使用
java@Servicepublic class UserService { @Autowired private DefaultUpdateLogic defaultUpdateLogic; public void delete(Long id) { // 执行逻辑删除操作 defaultUpdateLogic.update(entityMapper.selectById(id)); } }
### 总结MyBatis-Plus提供了一个简单易用的逻辑删除机制,通过设置一个标志位来表示数据已经被删除,而不真正删除数据。这种方式可以避免物理删除带来的风险,如数据丢失、历史数据无法追溯等。同时,还提供了一个`UpdateLogic`接口,用于定义逻辑删除的更新规则。通过配置和使用这些组件,可以轻松实现逻辑删除功能。
### 参考* [MyBatis-Plus 文档]( />* [LogicalDelete 注解源码]( />* [UpdateLogic 接口源码](