mybatisplus wrapper删除
时间: 2025-04-29 07:47:29 AIGC 浏览: 103
### MyBatisPlus 中 Wrapper 的删除操作
在 MyBatisPlus 中,`Wrapper` 接口及其子类提供了灵活的方式来构建复杂的查询条件。对于删除操作而言,主要通过 `remove` 方法来实现。
#### 基本语法结构
当使用 `Wrapper` 进行删除时,通常会调用继承自 `BaseMapper<T>` 的泛型 DAO 层中的 `remove(Wrapper<T> queryWrapper)` 方法[^1]:
```java
int remove(@Param("ew") Wrapper<T> wrapper);
```
此方法接收一个实现了 `Wrapper` 接口的对象作为参数,并返回受影响记录数。
#### 实际应用案例
##### 例子一:简单条件删除
如果想要根据特定字段值执行删除,则可以创建相应的 `QueryWrapper` 或者更推荐使用的 `LambdaQueryWrapper` 来设置匹配规则并传递给上述提到的方法:
```java
// 创建 QueryWrapper 并设定删除条件 (不建议)
QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
userQueryWrapper.eq("age", 20);
// 执行删除操作
int result = userDao.remove(userQueryWrapper);
// 更好的做法是采用 Lambda 表达式风格的写法以避免硬编码属性名错误的风险
LambdaQueryWrapper<User> lambdaUserQueryWrapper = Wrappers.<User>lambdaQuery();
lambdaUserQueryWrapper.eq(User::getAge, 20);
result = userDao.remove(lambdaUserQueryWrapper);
```
以上代码片段展示了如何利用 `LambdaQueryWrapper` 构建更加安全可靠的删除语句[^2]。
##### 例子二:复杂组合逻辑下的批量移除
除了单个条件外,还可以组合多个谓词表达更为精细的选择标准来进行多条目一次性清除工作:
```java
LambdaQueryWrapper<OrderDetail> orderDetailLambdaQueryWrapper = Wrappers.lambdaQuery();
orderDetailLambdaQueryWrapper.ge(OrderDetail::getCreateTime, startDate)
.le(OrderDetail::getCreateTime, endDate)
.inSql(OrderDetail::getId, "SELECT id FROM t_order WHERE status='CLOSED'");
int deletedCount = orderDetailDao.remove(orderDetailLambdaQueryWrapper);
```
这里演示了一个涉及时间范围以及外部表关联筛选的例子,在实际项目里可以根据业务需求调整相应部分[^3]。
#### 注意事项
- 在生产环境中应当谨慎对待任何可能导致数据丢失的操作;
- 尽量先备份重要资料再尝试大规模修改或清理动作;
- 考虑到性能因素,应尽可能缩小影响面至最小必要限度内的实体集合上实施变更行为。
阅读全文
相关推荐




















