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