mybatis-plus逻辑删除
- 首先说一下什么是物理删除----物理删除就是指把数据彻底从数据库删除掉,是彻底的删除干净
- 物理删除有个不好的地方就是直接将数据删除干净无法找回
- 逻辑删除就很人性化了----逻辑删除是mybatis-plus特有的属性主要是通过插件和特定的一个字段将其隐藏起来,并不是真正意义上的删除,它是可以恢复的
怎么实现的展示一波:
第一步
实体类
import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User5 {
@TableId(type = IdType.ID_WORKER)//数字类型的id使用,当类型为Long时默认使用,生成19位的Id值,
private String id;
private String name;
private Integer age;
private String email;
@TableField(fill = FieldFill.INSERT) //进行添加操作时有值
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE) //进行添加和修改操作时有值
private Date updateTime;
//添加version属性,注意添加@Version注解
//同时使用TableField设置初始值为1
@TableField(fill = FieldFill.INSERT_UPDATE)
@Version
private Integer version;
//添加删除标记
@TableLogic
@TableField(fill = FieldFill.INSERT)//设置初始值
private Integer deleted;
public User5(String name, Integer age, String email) {
this.name = name;
this.age = age;
this.email = email;
}
}
配置工具类 (需要配置逻辑删除插件)
package cn.com.zzn.config;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
@MapperScan("cn.com.zzn.mapper")//添加扫描注解,写入mapper的路径,否则会找不到接口并报错
@Configuration
public class MybatisPlusConfig {
//乐观锁插件
@Bean
public OptimisticLockerInterceptor OptimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
/*
Sql性能分析插件
开发环境使用,上线项目不推荐使用
*/
@Bean
@Profile({"dev","test"})//设置使用环境
public PerformanceInterceptor performanceInterceptor(){
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1000);//ms值,超过此处的毫秒值则不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
// 逻辑删除插件
@Bean
public ISqlInjector sqlInjector(){
return new LogicSqlInjector();
}
}
还需配置application.properties
#com.mysql.cj.jdbc.Driver:springBoot2.1以上要加上cj
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#serverTimezone=GMT%2B8:添加时区
spring.datasource.url=jdbc:mysql://localhost:3306/db01?serverTimezone=GMT%2B8
spring.datasource.username=db01
spring.datasource.password=db01
#mybatis日志:添加后可以查看执行的sql语句
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#设置当前环境:dev;test;prod
spring.profiles.active=dev
#设置逻辑删除的值:1-已删除;0-没有删除
#可自行设置值,但是一般不设置,1和0为默认值
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0