mybatis-plus批量删除_Mybatis Plus mapper的多种姿势删除数据

Mybatis Plus的删除操作内置了4种方法,我们来演示一下Mybatis Plus的删除操作。

ee97afb4650f4e4037ccb6de832b8f3a.png

Mybatis Plus mapper的删除操作

1、根据主键ID删除指定单条数据

方法:

int deleteById(Serializable id);

代码:

    @Test    public void testDeleteById() {        System.out.println(("----- deleteById method test ------"));        List userList = userMapper.selectList(null);        System.out.println("-----删除前数据:");        userList.forEach(System.out::println);        userMapper.deleteById(5L);        System.out.println("-----删除后剩余数据:");        List userList2 = userMapper.selectList(null);        userList2.forEach(System.out::println);    }

前面已经输出了较多sql,我们这里简洁一些,只输出打印的数据

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)-----删除后剩余数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)

2、基于map中设置的key-value,删除一条或多条数据

基于map的删除,可以设置多个列作为条件,被匹配的数据都将被删除。

方法:

int deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);

代码:

    @Test    public void testDeleteByMap() {        System.out.println(("----- deleteByMap method test ------"));        List userList = userMapper.selectList(null);        System.out.println("-----删除前数据:");        userList.forEach(System.out::println);        Map columnMap = new HashMap<>();        columnMap.put("Name","Tom");        userMapper.deleteByMap(columnMap);        System.out.println("-----删除后剩余数据:");        List userList2 = userMapper.selectList(null);        userList2.forEach(System.out::println);    }

输出:

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)-----删除后剩余数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)

3、基于一个实体作为条件,删除一条或多条数据

方法:

int delete(@Param(Constants.WRAPPER) Wrapper wrapper);

如果方法的参数设置为null,那么相当于全表删除

代码:

输出结果:

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)==>  Preparing: DELETE FROM user ==> Parameters: <==    Updates: 5-----删除后剩余数据:==>  Preparing: SELECT id,name,age,email FROM user ==> Parameters: <==      Total: 0

我们从输出的日志看出:

==>  Preparing: DELETE FROM user ==> Parameters: <==    Updates: 5

sql是全表删除。

如果方法设置了实体作为参数,那就按照实体匹配,删除对应数据。

4、根据主键ID集合,批量删除数据

方法:

int deleteBatchIds(@Param(Constants.COLLECTION) Collection extends Serializable> idList);

代码:

    @Test    public void testDeleteBatchIds() {        System.out.println(("----- deleteBatchIds method test ------"));        List userList = userMapper.selectList(null);        System.out.println("-----删除前数据:");        userList.forEach(System.out::println);        List list = new ArrayList();        list.add(4L);        list.add(5L);        userMapper.deleteBatchIds(list);        System.out.println("-----删除后剩余数据:");        List userList2 = userMapper.selectList(null);        userList2.forEach(System.out::println);    }

输出:

-----删除前数据:User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)User(id=4, name=Sandy, age=21, email=test4@baomidou.com)User(id=5, name=Billie, age=24, email=test5@baomidou.com)==>  Preparing: DELETE FROM user WHERE id IN ( ? , ? ) ==> Parameters: 4(Long), 5(Long)<==    Updates: 2-----删除后剩余数据:==>  Preparing: SELECT id,name,age,email FROM user ==> Parameters: <==    Columns: ID, NAME, AGE, EMAIL<==        Row: 1, Jone, 18, test1@baomidou.com<==        Row: 2, Jack, 20, test2@baomidou.com<==        Row: 3, Tom, 28, test3@baomidou.com<==      Total: 3User(id=1, name=Jone, age=18, email=test1@baomidou.com)User(id=2, name=Jack, age=20, email=test2@baomidou.com)User(id=3, name=Tom, age=28, email=test3@baomidou.com)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 MyBatis-Plus 中,可以使用 `deleteBatchIds()` 方法来实现批量删除操作。该方法接受一个 `Collection` 类型的参数,其中包含要删除的记录的 ID 值列表。 示例代码: ```java List<Long> idList = Arrays.asList(1L, 2L, 3L); // 要删除的记录的 ID 值列表 int rows = mapper.deleteBatchIds(idList); // 执行批量删除操作,并返回受影响的行数 ``` 另外,如果你使用的是 MyBatis-Plus 的 Service 层封装,可以直接使用 `removeByIds()` 方法来实现批量删除。该方法接受一个 `Collection` 类型的参数,其中包含要删除的记录的 ID 值列表。 示例代码: ```java List<Long> idList = Arrays.asList(1L, 2L, 3L); // 要删除的记录的 ID 值列表 boolean success = service.removeByIds(idList); // 执行批量删除操作,并返回操作结果(true 或 false) ``` 需要注意的是,在执行批量删除操作时,可能会涉及到事务处理。如果要确保所有删除操作都成功,可以将方法标记为 `@Transactional` 注解,以便在出现异常时回滚事务。 ### 回答2: Mybatis-Plus是一个基于Mybatis的增强工具,可以简化Mybatis的使用。使用Mybatis-Plus进行批量删除操作可以通过以下步骤实现: 1. 导入相关依赖:在pom.xml文件中添加Mybatis-Plus的依赖。 2. 创建Mapper接口:在DAO层创建一个继承BaseMapperMapper接口。 3. 创建实体类:创建需要进行批量删除的实体类。 4. 批量删除数据:在Service层的具体方法中调用Mapper接口方法实现批量删除操作。 例如,批量删除用户信息的示例代码如下: 1. 首先在pom.xml文件中添加Mybatis-Plus的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.4.0</version> </dependency> ``` 2. 创建Mapper接口: ```java public interface UserMapper extends BaseMapper<User> { } ``` 3. 创建实体类: ```java @Data public class User { private Long id; private String name; // 其他属性 } ``` 4. 批量删除数据: ```java @Service public class UserService { @Autowired private UserMapper userMapper; public void batchDeleteUser(List<Long> userIdList) { userMapper.deleteBatchIds(userIdList); } } ``` 以上代码片段中,通过调用deleteBatchIds方法实现批量删除操作。deleteBatchIds方法接收一个List类型的参数,参数中包含待删除数据的ID列表。 通过以上步骤可以使用Mybatis-Plus实现批量删除操作。 ### 回答3: MyBatis-Plus 是一个在之前的 MyBatis 框架基础上进行封装和扩展的优秀持久层框架。它提供了很多方便的数据库操作方法,包括批量删除。 要实现 MyBatis-Plus批量删除功能,首先需要在实体类中添加注解 @TableName,标注数据库表的名称。然后,使用批量删除的方式可以使用 MyBatis-Plus 提供的 QueryWrapper 类实现。QueryWrapper 类是 MyBatis-Plus 提供的一个查询条件构造器。 下面是一个示例代码: ``` // 导入相关类 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; // 自定义的实体类 public class User { @TableId private Long id; private String name; } // MyBatis-Plus 批量删除的示例代码 public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { @Autowired private UserMapper userMapper; // 自定义的 Mapper 接口 @Override public boolean deleteUserList(List<Long> idList) { QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.in("id", idList); int deleteCount = userMapper.delete(queryWrapper); return deleteCount > 0; } } ``` 上述代码中,我们使用 `QueryWrapper.in` 方法来构造查询条件,`idList` 参数传入的是要删除的主键列表。然后,通过调用 Mapper 的 `delete` 方法来实现批量删除操作。返回值 `deleteCount` 是操作影响的行数。 综上所述,MyBatis-Plus批量删除可以通过构造查询条件并调用 Mapper 的 `delete` 方法来实现。通过 `QueryWrapper.in` 方法可以实现对指定主键列表的批量删除操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值