常用的删除方法
MyBatis-Plus提供了许多的删除方法,一些简单的操作可以直接调用这些方法即可,如:deleteById、deleteBatchIds、deleteByMap,如果是复杂的删除则需要借助条件构造器(后续介绍)。
user表已有数据如下:
下面依次进行测试:
使用deleteById(通过id删除一条数据)
@Testpublic void test1() {userMapper.deleteById(1L);}

注意这里user表使用的是bigint,实体类使用的是Long,因此参数必须是Long型:1L
使用deleteBatchIds(通过id批量删除)
@Test
public void test2() {
//参数需要一个Collection集合
userMapper.deleteBatchIds(Arrays.asList(2L, 6L));
}
使用deleteByMap(通过map删除一条数据)
@Test
public void test3() {
HashMap<String, Object> map = new HashMap<>();
map.put("name", "root");
map.put("pwd", "123456");
//需要一个Map<String, Object>集合参数
userMapper.deleteByMap(map);
}
逻辑删除
数据的删除通常分为物理删除和逻辑删除,物理删除是从数据库彻底删除(之前做的删除都是物理删除),而逻辑删除是该数据虽然不需要了,但是并不把它从数据库彻底删除,而是把它保留在数据库,但是用户无法查询到,相当于回收站。
实现逻辑删除的其中一种方案就是在数据库加一个标识字段,如:字段deleted = 0为用户可查询,而deleted = 1则表示该条数据已被逻辑删除,用户无法查询。
数据库增加字段:
在MyBatis-Plus中提供了内置的逻辑删除插件,我们只要在配置类中注册组件和在配置文件配置即可:
@Configuration
public class MyBatisPlusConfig {
/**
* 注册逻辑删除组件
*
* @return new LogicSqlInjector()
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
}
mybatis-plus:
global-config:
db-config:
#1表示已被逻辑删除
logic-delete-value: 1
#0表示未被逻辑删除
logic-not-delete-value: 0
然后实体类需要对应的属性并标上 @TableLogic 注解:
public class User {
@TableId(value = "id", type = IdType.ID_WORKER)
private Long id;
private String name;
private String pwd;
@TableLogic
private Integer deleted;
//构造器和getXxx、setXxx
}
然后就可以把物理删除变成逻辑删除了,而且删除的方法也不改变,如:
@Test
public void test3() {
HashMap<String, Object> map = new HashMap<>();
map.put("name", "小阿狸2");
map.put("pwd", "1225466");
//需要一个Map<String, Object>集合参数
userMapper.deleteByMap(map);
}

可以看到sql并不是delete操作,而是update操作:
UPDATE user SET deleted=’1’ WHERE name = ? AND pwd = ? AND deleted=0
因此把deleted字段改为1就做到了逻辑删除,但数据其实没有被真实删除,这样的操作是很常用的,某些数据是不会被真正删除的,都会用逻辑删除来代理物理删除的。而被MyBtis-Plus逻辑删除的数据也不能被查询、更改。
