Mybatisplus如何实现逻辑删除,面试
时间: 2024-01-25 12:02:52 浏览: 61
Mybatisplus通过在实体类中添加一个逻辑删除标识字段,例如使用注解@TableLogic标注一个Boolean类型的字段,来实现逻辑删除功能。当执行删除操作时,Mybatisplus会自动将该字段的值设置为删除标识值(例如0或1)。同时,Mybatisplus还提供了逻辑删除的全局配置,可以在配置文件中设置逻辑删除的字段名和删除标识值等参数。需要注意的是,逻辑删除只是将数据标记为删除状态,并不会真正删除数据。如果需要彻底删除数据,可以使用物理删除。
相关问题
mybatisplus实现逻辑删除
MyBatisPlus是一个基于MyBatis的代码生成器和持久层框架,它简化了数据操作,其中一个常用的功能就是实现逻辑删除。逻辑删除通常不是通过直接删除记录,而是将一个字段标记为"已删除",比如`is_delete`字段默认值为0表示正常,1表示删除。
在MyBatisPlus中,你可以通过以下步骤来处理逻辑删除:
1. **配置全局通用Mapper**:在全局配置文件(如GlobalConfig.xml)中,设置全局启用逻辑删除功能,例如:
```xml
<insert id="insertOrUpdate" parameterType="com.example.YourEntity">
INSERT INTO your_table (field1, field2) VALUES (#{field1}, #{field2})
ON DUPLICATE KEY UPDATE is_delete = #{isDelete}
</insert>
```
这里`isDelete`通常会默认传入1,如果插入新记录则什么都不做,如果更新已经存在的记录,则将其标记为已删除。
2. **实体类注解**:在你的实体类上添加`@TableLogic`注解,定义删除标志列和删除策略,如软删除:
```java
@TableLogic(
logicField = "is_delete", // 删除标志列名
deleteStrategy = LogicDeleteStrategy.REPLACE, // 删除策略:替换为0(非删除)、1(软删除)
tableName = "your_table_name" // 如果不是默认表名,需要指定
)
private Integer isDelete;
```
3. **CRUD操作**:在业务代码中,当你调用保存或更新方法时,默认会自动处理逻辑删除。如果你不想影响逻辑删除,可以显式地传入`updateEntity.setIsDelete(null)`来禁用该逻辑。
mybatisplus的逻辑删除
MyBatisPlus提供了逻辑删除功能,它与物理删除有一些区别。在使用常规的逻辑删除方案时,我们需要考虑很多因素,为了提高效率,更推荐使用MyBatisPlus提供的逻辑删除方案。使用MyBatisPlus的逻辑删除功能非常简单。开启逻辑删除功能后,MyBatisPlus在删除、查询和更新时会自动加上条件deleted=0,即只对没有被删除的数据进行操作。在建表时,建议对deleted字段做默认限制,默认为0(未删除),插入数据时这个值可以不用设置。对于自己在xml文件中定义的接口方法,MyBatisPlus不会自动开启逻辑删除功能,需要我们自己维护逻辑删除功能。在查询时,MyBatisPlus会自动追加where条件过滤掉已删除的数据,并且使用wrapper.entity生成的where条件会忽略该字段。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
阅读全文