什么是物理删除,什么是逻辑删除?
物理删除就是直接干掉数据库的数据,无法再恢复回来。但在企业级项目中,物理删除已经非常少见,而是使用逻辑删除。逻辑删除本质上是个update操作,通过一个标记字段来识别某个数据是否被隐藏起来,但是对于用户来说看不到了自然以为就是删除了。
前置准备:
数据库新建user表,用deleted来作为逻辑删除标志,0表示未删除,1表示已删除;
然后设置默认为0(未删除)
再随便添加一些测试数据。
创建项目,导入相关依赖(略)。
看一下Mybatis-plus是如何进行逻辑删除的
通过deleteById来进行物理删除:
可以看到id为2的数据已经看不见了
逻辑删除:
逻辑删除本质上是个update操作,通过删除标记来识别某个数据是否被隐藏起来,假设在表中设置一个deleted字段,已删除用1表示,未删除用0表示,这样以后在每次查询数据时候,都会添加一个条件 where deleted = 0,这样就永远不会查出 deleted= 1的数据。
第一步在实体类添加该字段,并加上注解@TableLogic,该注解就表示逻辑删除位。
第二步,我们需要写一个配置类来开启mybatis-plus的逻辑删除。 MybatisConfig.java发现找不到依赖,上网查询发现,高版本MP自带逻辑删除,已经不需要手动配置了。
我们直接用deleteById()方法测试。
发现方法并没有变,只是添加了@TableLogic注解,就会使用逻辑删除
再看数据库,id为11的数据并没有被删除,还存在数据库中
这样逻辑删除就成功了,最后,我们直接查询全部数据:
此时sql中自动添加了where deleted = 0 来帮我们查询未删除的所有数据。
mybatis和mybatis-plus的原理一致,只是手动在xml文件里面添加条件判断,删除的时候使用update修改删除标志就行了。