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。

posted @ 2020-11-15 00:39  Java程序员进阶  阅读(254)  评论(0编辑  收藏  举报