mybatis-plus删除实现、逻辑删除
花开堪折直需折,莫待无花空折枝
基本删除
根据ID删除
- 删除id为1的用户
// 根据id删除
int i = userMapper.deleteById(1L);
System.out.println("删除结果:"+i);
根据ID批量删除
- 删除id为2,6的两个用户:
//根据id批量删除
int i2 = userMapper.deleteBatchIds(Arrays.asList(2, 6));
条件删除
- 删除name为Tom的用户
- 通过Map来构造条件,key是数据库字段的名称,value是条件值
//结合Map实现删除的条件
Map<String,Object> conditionsMap=new HashMap<>();
conditionsMap.put("name","Tom");
int i3 = userMapper.deleteByMap(conditionsMap);
逻辑删除
逻辑删除:
- 不是真正意义上的删除,而是通过一个标识位来表示逻辑上已删除;
- 逻辑删除是为了方便数据恢复和保护数据本身价值等等的一种方案,但实际就是删除
- 插入: 不作限制
- 查找: 追加where条件过滤掉已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 更新: 追加where条件防止更新到已删除数据,且使用 wrapper.entity 生成的where条件会忽略该字段
- 删除: 转变为 更新
物理删除:从数据库中直接删除数据
mybatis-plus逻辑删除实现:
- 数据库增加标识字段
- 进行逻辑删除配置
mybatis-plus:
global-config:
db-config:
# logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
- @TableLogic标注实体类中的删除标识属性(如果上一步配置了logic-delete-field就不进行这一步)
@TableLogic
private Integer deleted;
测试:
@Test
void delTest(){
// 根据id删除
int i = userMapper.deleteById(4L);
}
结果:是更新deleted字段而不是直接删除
测试查询:
@Test
void selectTest(){
List<User> users = userMapper.selectList(null);
}
- 数据库中仍然有id为4的数据记录
- 查询结果并没有
转载请注明来源,谢谢