mybatisplus根据非主键字段批量删除
时间: 2023-09-06 07:09:15 浏览: 811
在 Mybatis-Plus 中,可以使用 Wrapper 实现根据非主键字段批量删除。具体步骤如下:
1. 定义一个 Wrapper 对象,例如:
```
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("status", 0);
```
2. 调用 delete 方法,例如:
```
int result = userMapper.delete(wrapper);
```
上述代码表示根据 status 字段为 0 的记录进行删除。
注意:在实体类中,需要使用 @TableLogic 注解标注逻辑删除字段,例如:
```
@TableLogic
private Integer deleted;
```
这样,执行 delete 操作时,会自动忽略已被逻辑删除的记录。
相关问题
mybatisplus按非主键字段删除
### 使用 MyBatisPlus 按非主键字段删除记录
在实际开发过程中,有时需要根据实体类中的其他字段而非主键来进行数据的删除操作。MyBatis-Plus 提供了灵活的方式支持这种需求。
对于按非主键条件执行删除动作的情况,可以利用 `deleteByMap` 方法或者构建查询Wrapper对象来实现更复杂的逻辑判断并完成删除工作[^1]。下面给出具体的例子说明这两种方法:
#### 方法一:通过 deleteByMap 进行简单条件匹配删除
当只需要基于单个或多个列作为过滤条件时,推荐使用此方式。创建一个 Map 对象放入相应的 key-value 键值对即可表示要筛选的数据项,之后调用该函数传入封装好的参数表以达到目的。
```java
// 创建 HashMap 存储非主键字段及其对应值
HashMap<String, Object> columnMap = new HashMap<>();
columnMap.put("name", "Tom");
columnMap.put("age", 20);
int result = userMapper.deleteByMap(columnMap);
System.out.println(result); // 输出受影响行数
```
这种方法适用于较为简单的场景下快速定位目标记录集,并对其进行批量移除处理。
#### 方法二:借助 Wrapper 构造器编写复杂查询语句
如果涉及到多表联查或者其他高级特性,则应该考虑采用 LambdaQueryWrapper 或 QueryWrapper 来构造更加精确的选择表达式。这允许开发者定义任意数量和类型的谓词组合而成最终符合条件的结果集合,进而实施删除指令。
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getName, "Tom").gt(User::getAge, 18);
int rowsAffected = userMapper.delete(wrapper);
System.out.printf("%d records have been deleted.\n", rowsAffected);
```
上述代码片段展示了如何运用 Lambda 表达式的简洁语法结构化地描述业务规则,从而提高可读性和维护效率的同时也增强了灵活性。
mybatisplus根据非主键批量更新
使用 MyBatis Plus 根据非主键批量更新的方法是使用 `update` 方法,并配合 `Wrapper` 来实现条件更新。
首先,我们需要创建一个 `Wrapper` 对象,用于设置更新条件。然后,调用 `update` 方法,传入更新的字段和更新条件。
以下是一个示例代码:
```java
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface YourMapper extends BaseMapper<YourEntity> {
int batchUpdate(List<YourEntity> entityList);
}
public class YourServiceImpl implements YourService {
@Autowired
private YourMapper yourMapper;
@Override
public int batchUpdate(List<YourEntity> entityList) {
int count = 0;
for (YourEntity entity : entityList) {
UpdateWrapper<YourEntity> updateWrapper = new UpdateWrapper<>();
// 设置更新条件,例如:
updateWrapper.eq("column1", entity.getColumn1Value());
updateWrapper.eq("column2", entity.getColumn2Value());
// 设置更新字段,例如:
YourEntity updateEntity = new YourEntity();
updateEntity.setUpdateColumn1(entity.getUpdateColumn1Value());
updateEntity.setUpdateColumn2(entity.getUpdateColumn2Value());
// 执行更新操作
int result = yourMapper.update(updateEntity, updateWrapper);
count += result;
}
return count;
}
}
```
上述代码中,`YourEntity` 是实体类,`YourMapper` 是继承自 `BaseMapper` 的 Mapper 接口,`YourServiceImpl` 是 Service 层的实现类。在 `batchUpdate` 方法中,我们遍历了传入的实体列表,每次循环创建一个 `UpdateWrapper` 对象,并设置更新条件和更新的字段,然后调用 `yourMapper.update` 方法执行更新操作。
注意,`UpdateWrapper` 中的条件可以根据你的实际需求进行设置,上述示例只是一个简单的示范。
阅读全文
相关推荐















