mybatis-plus删除操作(逻辑与物理删除)

在数据库中的删除分为逻辑删除和物理删除

  • 物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
  • 逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录

物理删除

  1. 根据id删除记录
    物理删除id为3的记录。
	/**
     * 测试根据id删除
     */
    @Test
    void testDeleteById(){
        int result = userMapper.deleteById(3L);
        System.out.println(result);
    }

执行前:
在这里插入图片描述
执行后:
在这里插入图片描述
在这里插入图片描述

  1. 批量删除
	/**
     * 测试根据多个id删除
     */
    @Test
    void testDeleteByIds(){
        int result = userMapper.deleteBatchIds(Arrays.asList(1, 2, 4, 5));
        System.out.println(result);
    }

执行前;
在这里插入图片描述
执行后:
在这里插入图片描述
在这里插入图片描述

  1. 简单的条件查询删除
	/**
     * 简单的条件删除
     */
    @Test
    void testDeleteByMapper(){
        HashMap<String, Object> map = new HashMap<>();
        map.put("name", "赵六");
        map.put("age", 18);
        int result = userMapper.deleteByMap(map);
        System.out.println(result);
    }

执行前:
在这里插入图片描述
执行后:
在这里插入图片描述
在这里插入图片描述

逻辑删除

逻辑删除的表中必须有一个表示该记录是否是逻辑删除的字段,一般为整形字段,1表示逻辑删除,0表示未被逻辑删除,在查询显示记录的时候我们就可以根据这个字段的值来判断是否显示这条记录了

  1. 在表中添加deleted字段
ALTER TABLE `user` ADD COLUMN `deleted` boolean

在这里插入图片描述

  1. 实体类添加deleted 字段
    并加上 @TableLogic 注解 和 @TableField(fill = FieldFill.INSERT) 注解
	@TableLogic
    @TableField(fill = FieldFill.INSERT)
    private Integer deleted;
  1. 元对象处理器接口添加deleted的insert默认值
@Override
public void insertFill(MetaObject metaObject) {
    ......
    this.setFieldValByName("deleted", 0, metaObject);
}
  1. application.properties 加入配置
    此为默认值,如果你的默认值和mp默认的一样,该配置可无
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
  1. 在 MybatisPlusConfig 中注册 Bean
    3.1.0之后的版本此步可以忽略
@Bean
public ISqlInjector sqlInjector() {
    return new LogicSqlInjector();
}
  1. 测试逻辑删除
/**
     * 测试根据id逻辑删除
     */
    @Test
    void testDeleteById(){
        int result = userMapper.deleteById(1376824000902184961L);
        System.out.println(result);
    }

执行前:
在这里插入图片描述
执行后:

在这里插入图片描述
在这里插入图片描述
7. 测试逻辑删除后的查询
MyBatis Plus中查询操作也会自动添加逻辑删除字段的判断

	 /**
     * 查询所有
     */
    @Test
    void testFindAll(){
        List<User> users = userMapper.selectList(null);
        users.forEach(System.out::println);

    }

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值