目录
一、数据库
数据库中添加逻辑删除字段:
二、实体类Entity 修改
实体类逻辑删除字段上加上 @TableLogic注解,字段支持所有数据类型(推荐使用 Integer,Boolean,LocalDateTime),如果使用LocalDateTime,建议逻辑未删除值设置为字符串null,逻辑删除值只支持数据库函数例如now()。
/**
* <p>
* 讲师
* </p>
*
* @author zhengzhaoxiang
* @since 2020-06-01
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel(value="EduTeacher对象", description="讲师")
public class EduTeacher implements Serializable {
private static final long serialVersionUID = 1L;
@TableLogic
@ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
private Integer isDeleted;
}
三、逻辑插件
Config 配置类中配置逻辑删除插件
/**
* @description:
* @author: zzx
* @createDate: 2020/6/1
* @version: 1.0
*/
@Configuration
@ComponentScan(basePackages = {"com.edu.eduservice","com.edu.servicebase"})
@MapperScan(basePackages = {"com.edu.eduservice.mapper"})
public class myConfig {
/**
* 逻辑删除插件
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
四、删除 Ctroller
/**
* <p>
* 讲师 前端控制器
* </p>
*
* @author zhengzhaoxiang
* @since 2020-06-01
*/
@RestController
@RequestMapping("/eduservice/edu-teacher")
public class EduTeacherController {
@Autowired
private EduTeacherService eduTeacherService;
@DeleteMapping("{id}")
public boolean removeTeacher(@PathVariable Integer id){
boolean b = eduTeacherService.removeById(id);
return b;
}
}
五、测试
【1】测试工具
【2】数据库结果显示
以下为特殊需求设置
六、SpringBoot 配置方式
application.yml 加入配置(如果你默认值0表示未删除,1表示删除和mp默认的一样,该配置可无):当你用11表示删除,10表示未删除时,可以用此配置来进行修改,具体数字自己定义。
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag #全局逻辑删除字段值 3.3.0开始支持,详情看下面。
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
七、全局逻辑删除
从 3.3版本开始,如果公司代码比较规范,比如统一了全局都是 flag(可修改)为逻辑删除字段。使用此配置则不需要在实体类上添加 @TableLogic。但如果实体类上有 @TableLogic 则以实体上的为准,忽略全局。 即先查找注解再查找全局,都没有则此表没有逻辑删除。yml 配置如下:
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag #全局逻辑删除字段值
附件说明:逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除。如果你需要再查出来就不应使用逻辑删除,而是以一个状态去表示。
如: 员工离职,账号被锁定等都应该是一个状态字段,此种场景不应使用逻辑删除。若确需查找删除数据,如老板需要查看历史所有数据的统计汇总信息,请单独手写sql。
----架构师成长路线,关注公众号获取----