mybatis plus更新数据
时间: 2025-05-10 09:36:20 浏览: 13
### MyBatis Plus 中更新数据的方法与示例
MyBatis-Plus 提供了多种方法用于执行更新操作,这些方法可以满足不同的业务需求。以下是几种常见的更新数据的方式及其对应的代码示例。
#### 使用 `updateById` 方法
`updateById` 是一种简单且常用的更新方法,适用于根据主键 ID 进行记录更新的情况。该方法会自动填充实体对象中的字段值并将其映射到数据库表中对应列进行更新[^1]。
```java
// 假设有一个 User 实体类
User user = new User();
user.setId(1L); // 设置要更新的记录ID
user.setName("张三"); // 修改名称
user.setAge(28); // 修改年龄
boolean result = userMapper.updateById(user);
if (result) {
System.out.println("更新成功");
} else {
System.out.println("更新失败");
}
```
#### 使用 `update` 方法配合 Wrapper 条件构建器
当需要更复杂的条件更新时,可以通过 `update` 方法结合 Wrapper 构建动态 SQL 条件。
```java
LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(User::getId, 1L) // 设置更新条件:id=1
.set(User::getName, "李四") // 设置修改后的name值
.set(User::getAge, 30); // 设置修改后的age值
int rowsAffected = userMapper.update(null, updateWrapper);
System.out.println("受影响的行数:" + rowsAffected);
```
#### 批量更新
对于批量更新的需求,MyBatis-Plus 并未提供内置的单次调用完成全部更新功能,但可通过循环多次调用上述方法或者自定义 SQL 实现。
```java
List<User> userList = Arrays.asList(
new User().setId(1L).setName("王五").setAge(25),
new User().setId(2L).setName("赵六").setAge(35)
);
for (User user : userList) {
userMapper.updateById(user);
}
System.out.println("批量更新完成!");
```
---
#### 数据权限注意事项
如果项目中有涉及数据权限控制,则需注意在更新过程中可能触发的数据权限校验逻辑。通常情况下,这会在拦截器层面实现,并通过注解等方式绑定特定规则至具体方法上[^2]。
例如:
```java
@DS("slave") // 切换到从库(假设存在读写分离)
@DataPermission(roleId = "admin", departmentId = "#department.id")
public boolean updateUserProfile(Long userId, String name, Integer age) {
User user = new User();
user.setId(userId);
user.setName(name);
user.setAge(age);
return userMapper.updateById(user);
}
```
此处展示了如何利用自定义注解来限定某些敏感字段仅允许指定角色或部门下的成员编辑。
---
#### 多数据源场景下更新操作
在多数据源环境下,确保每次更新请求都能正确指向目标数据源至关重要。借助 MyBatis-Plus 的 AOP 功能可轻松达成此目的[^3]。
配置完成后即可像平常一样编写 Mapper 层接口而无需额外关注底层切换细节:
```java
@Mapper
public interface SlaveUserMapper extends BaseMapper<User> {}
@Service
public class UserService {
@Autowired private SlaveUserMapper slaveUserMapper;
public void modifyOnSlaveDataSource() {
User user = new User();
user.setId(1L);
user.setName("测试用户");
slaveUserMapper.updateById(user);
}
}
```
以上即为针对不同情况设计的一些典型更新方案说明。
---
阅读全文
相关推荐


















