@TableLogic注解(推荐)
@TableLogic注解表示逻辑删除
效果
在字段上加上这个注解再执行BaseMapper的删除方法时,删除方法会变成修改
场景
1.实体类中属性加上@TableLogic,
@TableLogic
private Integer dataStatus;
2.调用BaseMapper的deleteById(id)或者调用IService的removeById(id)
效果:
没有@TableLogic注解调用deleteById/removeById,直接删除数据。
SQL: delete from table where id = 1
有注解走Update方法
SQL:Update table set isDelete = 1 where id = 1
/*
@TableLogic注解参数
value = "" 未删除的值,默认值为0
delval = "" 删除后的值,默认值为1
*/
@TableLogic(value="原值",delval="改值")
扩展
当使用了@TableLogic注解,调用update方法是并不会将该字段放入修改字段中,而是在条件字段中。即使你给dataStatus赋值也不会修改。
SQL: Update table set 字段1 = 值1,字段2 = 值2 where id = 1 and data_status = 0
相关源码
/**
* SQL 逻辑删除注入器
*
* @author hubin
* @since 2018-06-12
* @deprecated {@link DefaultSqlInjector} 里面已集成逻辑删除功能,entity 内字段注解 {@link TableLogic} 即可开启
*/
@Deprecated
public class LogicSqlInjector extends DefaultSqlInjector {
}
全局配置(不推荐,仅科普)
mybatis-plus:
global-config:
db-config:
logic-delete-field: isDeleted # 全局逻辑删除的实体字段名
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
特殊场景
对于 MyBatis-Plus 中配置了逻辑删除的表,默认情况下会执行逻辑删除操作,将 @TableLogic
标记的字段更新为特定的逻辑删除值(例如将 is_deleted
更新为 1)。如果想要实现物理删除而不是逻辑删除,可以使用以下两种方法:
方法一
使用 deleteById
或 deleteBatchIds
方法并结合 @SQL
注解来编写原生 SQL 语句进行物理删除。
@Mapper
public interface DemoMapper extends BaseMapper<Demo> {
@SQL("DELETE FROM demo WHERE id = #{id}")
void deletePhysicallyById(Long id);
@SQL("DELETE FROM demo WHERE id IN (:ids)")
void deletePhysicallyBatchIds(@Param("ids") List<Long> ids);
}
方法二
通过继承 BaseMapper
并自定义方法来实现物理删除。
@Mapper
public interface DemoMapper extends BaseMapper<Demo> {
void deletePhysicallyById(Serializable id);
void deletePhysicallyBatchIds(Collection<? extends Serializable> ids);
}
然后,在 XML 映射文件中编写对应的 SQL 语句。
<mapper namespace="com.example.DemoMapper">
<delete id="deletePhysicallyById">
DELETE FROM demo WHERE id = #{id}
</delete>
<delete id="deletePhysicallyBatchIds">
DELETE FROM demo WHERE id IN
<foreach collection="ids" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>
通过上述方法,可以使用原生 SQL 语句或自定义方法来执行物理删除操作,绕过 MyBatis-Plus 配置的逻辑删除功能。请注意,在进行物理删除之前,请确保已经仔细考虑了数据安全性和完整性的问题,并确认真正需要进行物理删除操作。
文档更新时间: 2023-10-10 09:43 作者:伍润源