删除操作

删除操作

  • 基本删除操作

//删除操作 根据ID删除 单个
@Test
public void testdelete(){
    mapper.deleteById(1420616607406571522L);
}
@Test//批量删除
public void testdelete02(){
    mapper.deleteBatchIds(Arrays.asList(1,2,3));//删除id为1 2 3 的用户
}
//通过map操作
@Test
public void testmapdelete(){
    HashMap<String, Object> map = new HashMap<>();
    map.put("name","顶顶顶");//删除name为顶顶顶的用户
    mapper.deleteByMap(map);
}

逻辑删除

  1. 物理删除:从数据库直接移除

  2. 逻辑移除:在数据库中没有直接删除,而是通过一个变量让他失效

    场景:管理员可以查看被删除的数据,防止数据丢失,类似于回收站

使用:

  • 在数据库中增加一个delete_flag字段 默认值为0

  • 实体类同步
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Long id;
    private String name;
    private Integer age;
    private String email;
    @Version //乐观锁的注解
    private int version;
    // 自动填充内容
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    
    @TableLogic     //逻辑删除注解
    private int deleteFlag;
}
  • 配置逻辑删除

    高版本可以不需要组件,只需要注解。

// 逻辑删除组件!
@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}

# 配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
  • 测试删除
@Test
public void testdelete(){
    mapper.deleteById(4);
}

//UPDATE user SET delete_flag=1 WHERE id=? AND delete_flag=0 

可以看到,测试的是删除操作,实际上走的是更新操作,并不是删除操作
测试查询 会跟上where deleted=0的sql 非管理员

posted @ 2021-07-30 09:33  saxon宋  阅读(157)  评论(0)    收藏  举报