1、删除
1.1根据id删除记录
@Test
public void testDeleteById(){
int result = userMapper.deleteById(1L);
system.out.println(result);
}
1.2批量删除
@Test
public void testDeleteBatchIds() {
int result = userMapper.deleteBatchIds(Arrays.asList(1, 2, 3));//删除id为1,2,3的记录
system.out.println(result);
}
1.3简单条件删除
@Test
public void testDeleteByMap() {
HashMap<String, Object> map = new HashMap<>();
map.put("name", "Helen");
map.put("age", 18);
int result = userMapper.deleteByMap(map);
system.out.println(result);
}
2、逻辑删除
2.1物理删除和逻辑删除
物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
逻辑删除的使用场景:
1、可以进行数据恢复
2、有关联数据,不便删除
2.2 逻辑删除实现流程
2.2.1数据库修改
添加 deleted字段
ALTERTABLE `user` ADD COLUMN `deleted` boolean DEFAULT false
2.2.2实体类修改
添加deleted 字段,并加上 @TableLogic 注解
@TableLogic
private Integer deleted;
2.2.3配置
application.properties 加入以下配置,此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
每插入一条新记录,该记录的deleted字段都自动填充0
2.2.4 测试
测试后发现,数据并没有被删除,deleted字段的值由0变成了1
测试后分析打印的sql语句,是一条update
注意:被删除前,数据的deleted 字段的值必须是 0,才能被选取出来执行逻辑删除的操作
@Test
public void testLogicDelete() {
int result = userMapper.deleteById(1L);
System.out.println(result);
}
2.2.5测试逻辑删除后的查询
@Test
public void testLogicDeleteSelect() {
List<User> users = userMapper.selectList(null);
users.forEach(System.out::println);
}
发现第一条记录被过滤了,因为第一条记录的deleted字段为1,虽然仍在数据库中但并未被查询到,这就是“逻辑删除”。