物理删除
真实删除,将对应数据从数据库中删除,之后会查询不到此条被删除数据
根据 ID 删除数据
public void deleteById() {
int result = userMapper.deleteById(1L);
System.out.println(result);
}
批量删除
public void batchDeleteById() {
int result = userMapper.deleteBatchIds(Arrays.asList(2, 3, 4));
System.out.println(result);
}
简单条件查询删除
public void deleteByMap() {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("name", "BNTang");
paramMap.put("age", 23);
int result = userMapper.deleteByMap(paramMap);
System.out.println(result);
}
逻辑删除
假删除,将对应数据中代表是否被删除字段状态修改为 “被删除状态”,之后在数据库中仍旧能看到此条数据记录
数据库中添加 deleted
字段
ALTER TABLE `mybatisplus_db`.`user`
ADD COLUMN `deleted` int NULL AFTER `version`;
实体类中添加 deleted
字段
(fill = FieldFill.INSERT)
private Integer deleted;
元对象处理器接口添加 deleted
的 insert 默认值
this.setFieldValByName("deleted", 0, metaObject);
修改 application.properties
加入配置
此配置为配置默认值,如果你的默认值和 mp 默认的一样, 该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
注册 Bean 修改,Config.java
/**
* mp逻辑删除的配置
*/
public ISqlInjector iSqlInjector() {
return new LogicSqlInjector();
}
测试,测试流程为,首先调用我们之前的插入方法插入一条新的记录,然后在调用删除方法即可发现效果
注意事项
- 添加逻辑删除后
- 使用查询, 查询的内容只有标记为0的被查出来
如上查询发现没有数据,在看下图我数据库中全部为 null
所以没有,我在把这个 null
改为 0,运行结果如下