逻辑删除
概念
物理删除:真实删除。将对应数据从数据库中删除,之后查询不到此条被删除数据。
逻辑删除:假删除。在数据库中没有被移除而是通过改变一个变量来让它失效。如delete=0,delete=1。管理员可以查看被删除的数据,防止数据丢失。
SpringBoot整合MP进行逻辑删除具体操作
1.数据库中新增字段deleted(逻辑删除) 0没有被删除,1删除。
ALTER TABLE user ADD deleted int COMMENT '逻辑删除(0没有被删除,1删除)' default 0;
2.实体类同步数据(实体类字段上添加逻辑删除注解@TableLogic)
// 逻辑删除
@TableLogic
private Integer deleted;
3.添加MP依赖
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
4.在application.properties中配置逻辑主键的设定
# 逻辑删除 (0-没有被删除,1-删除)
#逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
5.在MyBatisPlusConfig配置类上添加组件**(3.4.2以上的版本无需添加插件)**
// 逻辑删除组件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
6.调用删除方法(deleteById、deleteBatchIds、deleteByMap)
删除的数据deleted字段(添加@TableLogic注解的字段)会变为1。
遇到的问题
配置逻辑删除后,MP执行SQL报错,SQL语句有乱码
原因
仿照MP官方案例的写法将注释写在值后面由于核心配置文件中注释跟在值后面,导致SQL语句中的 is_deleted=0
变为 is_deleted=0 # é€»è¾‘æœªåˆ é™¤å€¼(默认为 0)
。
在配置文件中已经能看到注释的颜色不为灰色,还是太粗心了
解决方式
将配置文件中的注解移至配置上方
重新运行项目,没有再出现SQL乱码问题。
完。