【MyBatis-Plus】(6)删除 + 逻辑删除

【MyBatis-Plus】(6)删除 + 逻辑删除

一、测试各种删除

还是使用之前springboot项目,使用之前的user表,创建一个UserDeleteTest,用于测试删除。

先使用之前的插入语句,多添加几条数据,用于删除测试

代码如下:单个id,多个id,多条件删除。

更多方法查看官方文档:Mapper CRUD 接口 - Delete

@SpringBootTest
public class UserDeleteTest {
    @Autowired
    UserMapper userMapper;

    /** 单个id删除 */
    @Test
    public void testSelectById() {
        userMapper.deleteById(1253591398346522633L);
    }

    /** 多个id删除 */
    @Test
    public void testSelectBatchIds() {
        userMapper.deleteBatchIds(Arrays.asList(1253591398346522634L, 1253591398346522635L));
    }

    /** 多条件删除(使用Map) */
    @Test
    public void testSelectByMap() {
        Map<String, Object> map = new HashMap();
        map.put("id", 1253591398346522636L);
        map.put("age", 20);
        userMapper.deleteByMap(map);
    }
}

备注:查询操作也是和删除差不多。

上面的操作时真实的删除了,也叫做 物理删除,数据消失了。

二、逻辑删除

一般情况下,我们会多增加一个字段,这个字段用来标注某条记录是否被删除了。

例如,deleted=0代表没有被删除,deleted=1则代表被删除了。这样只是逻辑上删除了,但是实际上该条数据还存在。所以称之为 逻辑删除

mybatis-plus提供了逻辑删除,下面将会进行对逻辑删除配置。

参考自官方文档:逻辑删除

备注:注册Bean(3.1.1开始不需要再去配置文件中注册了,现在官方文档也没写)

1.数据库增加deleted字段

在数据库中,增加deleted字段,用于 “逻辑删除”。类型为"int",默认值为"1"。

2.修改实体类

修改之前创建的user实体类。增加deleted字段。

同时增加 @TableLogic 注解。@TableLogic 描述:表字段逻辑处理注解(逻辑删除)。

官方文档 - @TableLogic

@Data
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    /** 字段自动填充策略 */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

    /** 乐观锁 */
    @Version

    private int version;
    /** 逻辑删除 */
    @TableLogic
    private int deleted;
}

3.修改application.yaml配置文件

修改之前的application.yaml配置文件。增加逻辑删除配置。

# DataSource Config
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=UTF-8&useSSL=false
    driver-class-name: com.mysql.jdbc.Driver
# mybatis-plus Config
mybatis-plus:
  configuration:
    # 日志配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  # 全局配置
  global-config:
    db-config:
      # 逻辑删除配置(1代表已删除,0代表未删除)
      logic-delete-value: 1
      logic-not-delete-value: 0

4.测试

此时,去新增一条数据,然后尝试使用id删除。会发现执行语句变成了update。如下:

==>  Preparing: UPDATE user SET deleted=1 WHERE id=? AND deleted=0 

此时去看数据库,可以发现数据还在,不过deleted字段值为"1"了,代表该数据以删除。

如果使用刚刚删除的id去查询。会发现查询语句的"WHERE"子句中,增加了一个" AND deleted=0 "。

==>  Preparing: SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE id=? AND deleted=0 

至此,已实现了逻辑删除。