一、数据库


数据库中添加逻辑删除字段:

二、实体类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。

MyBatisPlus 逻辑删除演示的更多相关文章

  1. mybatis-plus逻辑删除

    MP(mybatis plus)已经大大简化了我们好多的开发操作,基本的增删改查都有了,包括代码生成等等,今天想说的是它的逻辑删除功能.我们都在数据库设计时候经常会有is字段,表示是否删除,为了留下员 ...

  2. mybatis_plus实现自动填充和逻辑删除

    自定义填充 设置自定义填充规则 import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.i ...

  3. spring boot项目自定义数据源,mybatisplus分页、逻辑删除无效解决方法

    Spring Boot项目中数据源的配置可以通过两种方式实现: 1.application.yml或者application.properties配置 2.注入DataSource及SqlSessio ...

  4. Spring boot+Mybatisplus用AR模式实现逻辑删除操作

    Mybatisplus的AR模式 Active Record(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录.ActiveRecord ...

  5. 小书MybatisPlus第8篇-逻辑删除实现及API细节精讲

    本文为Mybatis Plus系列文章的第8篇,前7篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总 ...

  6. 【mybatis-plus】分页、逻辑删除

    通过mybatis-plus实现分页,也是很简单,插件大法. 一.分页 1.配置分页插件 把分页的插件也配置到统一的配置类里: @Configuration // 配置扫描mapper的路径 @Map ...

  7. Java开发学习(四十八)----MyBatisPlus删除语句之逻辑删除

    1.逻辑删除 接下来要讲解是删除中比较重要的一个操作,逻辑删除,先来分析下问题: 这是一个员工和其所签的合同表,关系是一个员工可以签多个合同,是一个一(员工)对多(合同)的表 员工ID为1的张业绩,总 ...

  8. mybatis配置的逻辑删除不好使了

    在使用mybatisplus中,可使用逻辑删除.案例中,使用mybatisplus逆向生成model,使用delete_status为识别逻辑删除字段. springboot 中配置启动逻辑删除 my ...

  9. Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现

    回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...

  10. mybatis 乐观锁和逻辑删除

    本篇介绍easymybatis如配置乐观锁和逻辑删除. 乐观锁 easymybatis提供的乐观锁使用方式跟JPA一样,使用@Version注解来实现.即:数据库增加一个int或long类型字段ver ...

随机推荐

  1. *args、**kwargs参数组

    '''def test(*args): # *agrs接收的是N个位置参数,不能接受关键字参数,转化成元祖 print(args)test(1,2,3,4,5,6)test(*[1,2,4,5,5]) ...

  2. 浏览器F12,Network中各按钮的作用

    Network下 preserve log:勾选,页面发生跳转,接口不丢失:(比如登录成功跳转到首页,登录的接口就没了,勾选Perserve log,会记录跳转前的接口): Disable cache ...

  3. GBDT中损失函数的负梯度用来拟合的一些理解

    将\(L(y_i,f(x_i))\)在\(f(x_i)=f_{m-1}(x_i)\)处泰勒展开到一阶(舍去余项,故为近似) \[L(y_i,f(x_i))\approx L(y_i,f_{m-1}(x ...

  4. Communications link failure:The last packet successfully received from the server was 0 millisecond ago

    出现这种错误的大致情况如下: 1.数据库连接长时间未使用,断开连接后,再去连接出现这种情况.这种情况常见于用连接池连接数据库出现的问题 2.数据库连接的后缀参数问题 针对上述两种情况,解决方案如下 1 ...

  5. ssh免密码登录服务器

    A机为本地主机(即用于控制其他主机的机器) B机为远程主机(即被控制的机器server)B机:192.168.3.145 假如A机无密码登录B机器     A机上的命令: 1,ssh-keygen - ...

  6. 【Android异常】关于静态注册BroadcastReceiver接收不到自定义广播的问题

    Android 8.0以上需要setComponent()来指定包名和类名,第1个参数是指接收广播类的包名,第2个参数是指接收广播类的完整类名.静态广播1.先使用Android Studio创建一个广 ...

  7. Callable、Future、FutureTash详解

    Callable.Future.FutureTash详解 Callable与Future是在JAVA的后续版本中引入进来的,Callable类似于Runnable接口,实现Callable接 口的类与 ...

  8. thymeleaf基础学习

    Thymeleaf 1.标准表达式 ${...}:变量表达式 *{...}: 选择表达式 #{...} : 消息表达式 @{...}: 连接表达式 <img th:src="@{url ...

  9. nRF51822蓝牙学习 进程记录 3:蓝牙协议学习--简单使用

    三天打鱼两天晒网,又学起了蓝牙,不过还好的是终于开始学习蓝牙协议部分了. 但是,一看起来增加了蓝牙协议的例程,真是没头绪啊.本身的教程资料解说太差了,看青风的蓝牙原理详解也是一头雾水. 经过不断地看各 ...

  10. js数组常用的方法

    var arr=['hello','前端','world']; 1. arr.join(分隔符):将数组中的值拼接成一个字符串,返回这个字符串,默认分隔符"," arr.join( ...