MyBatis_plus的物理删除与逻辑删除

本文详细解析了MyBatis_plus中物理删除与逻辑删除的区别,包括根据ID、多ID、条件删除的SQL执行,以及如何在类中实现逻辑删除功能。通过实例展示了如何在实际开发中运用这些技术,并介绍了如何查询已逻辑删除的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1)根据id进行删除

int result = userMapper.deleteById("1397387511965212673");
sql执行:
DELETE FROM user WHERE id=?

2)根据多个id批量删除

 int result = userMapper.deleteBatchIds(Arrays.asList("1397387511965212673", "1397387379655892993"));
sql执行:
 DELETE FROM user WHERE id IN ( ? , ? )

3)根据map条件进行删除

        Map<String, Object> map = new HashMap<>();
        map.put("name","刘老师");
        map.put("age","18");
        int result = userMapper.deleteByMap(map);
sql执行:
 DELETE FROM user WHERE name = ? AND age = ? 

注意:前面的三个都是物理删除,删除操作以后数据在表中并不存在,下面的是逻辑删除,逻辑删除就是更改数据库中某一个字段的状态,删除操作以后数据在表中还是存在的,通常我们用0和1来区分是否进行了物理删除。
注意:MyBatis_plus默认状态为1的已删除数据。
4)逻辑删除
(1)首先数据库中添加字段:
在这里插入图片描述
(2)类中添加属性名称

   @TableLogic
    private Integer deleted;

(3)测试

 int result = userMapper.deleteById("1397425981395927042");
sql执行:
UPDATE user SET deleted=1 WHERE id=? AND deleted=0 

(4)查询操作(默认查询状态为0的数据)

 List<User> userList = userMapper.selectList(null);
 userList.forEach(System.out::println);
sql执行:
 SELECT id,name,age,email,create_time,update_time,version,deleted FROM user WHERE deleted=0 
MyBatis-Plus中,默认情况下,逻辑删除是通过在实体类中添加一个逻辑删除字段(通常是`is_deleted`),并配置`LogicSqlInjector`来实现的。逻辑删除字段通常是`int`或`boolean`类型,标记数据是否被删除逻辑删除的数据并不会被物理删除,而是通过设置`is_deleted`字段的值来表示数据被删除。默认值通常是`0`表示未删除,`1`表示已删除。 要查询已经被逻辑删除的数据,可以使用MyBatis-Plus提供的`QueryWrapper`或者`LambdaQueryWrapper`来进行条件查询。在查询时,需要排除`is_deleted`字段为已删除标记的记录。例如,如果`is_deleted`字段为`1`表示已删除,那么查询条件应该是`is_deleted`不等于`1`。 以下是一个使用`QueryWrapper`来查询逻辑删除数据的示例: ```java import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; // 假设有一个IService接口的实现类service对应某个实体类 IService<Entity> service; // 创建查询条件,排除已经逻辑删除的数据 QueryWrapper<Entity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("is_deleted", 0); // 查询未被逻辑删除的数据 // 执行查询 List<Entity> list = service.list(queryWrapper); ``` 在这个示例中,`Entity`是对应的实体类,`is_deleted`是用于逻辑删除的字段。使用`eq("is_deleted", 0)`方法指定了查询条件,意味着查询`is_deleted`字段为`0`的记录,即未被逻辑删除的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值