常用的删除方法

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

使用deleteById(通过id删除一条数据)

  1. @Test
  2. public void test1() {
  3. userMapper.deleteById(1L);
  4. }

image.png
注意这里user表使用的是bigint,实体类使用的是Long,因此参数必须是Long型:1L

使用deleteBatchIds(通过id批量删除)

 @Test
 public void test2() {
    //参数需要一个Collection集合
    userMapper.deleteBatchIds(Arrays.asList(2L, 6L));
 }

image.png

使用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);
 }

image.png

逻辑删除

数据的删除通常分为物理删除和逻辑删除,物理删除是从数据库彻底删除(之前做的删除都是物理删除),而逻辑删除是该数据虽然不需要了,但是并不把它从数据库彻底删除,而是把它保留在数据库,但是用户无法查询到,相当于回收站。
实现逻辑删除的其中一种方案就是在数据库加一个标识字段,如:字段deleted = 0为用户可查询,而deleted = 1则表示该条数据已被逻辑删除,用户无法查询。
数据库增加字段:
image.png
在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);
}

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