mybatisplus 传入更新人不想自动填充,想设置我传入的值
时间: 2024-09-12 10:14:31 浏览: 55
ASP.NET中实现Form表单字段值自动填充到操作模型中
MyBatis-Plus 是 MyBatis 的一个增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。在使用 MyBatis-Plus 进行数据更新操作时,如果你不希望自动填充更新人字段(例如,由审计日志记录或特定业务逻辑处理),而是希望使用你传入的更新人值,你可以按照以下步骤操作:
1. **关闭自动填充**:如果你使用的是 MyBatis-Plus 的自动填充功能,可以通过配置关闭特定字段的自动填充。可以在实体类的字段上使用 `TableField` 注解,并设置 `fill` 属性为 `FieldFill.NEVER`。
```java
@TableField(fill = FieldFill.NEVER)
private String updateUser;
```
2. **自定义填充处理器**:如果需要在某些条件下手动填充更新人信息,可以通过实现 `MetaObjectHandler` 接口来自定义填充策略。然后在更新操作中,手动调用填充方法或者不调用。
```java
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MyMetaObjectHandler();
}
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 不手动调用填充方法,或者调用时不填充更新人字段
}
@Override
public void updateFill(MetaObject metaObject) {
// 如果需要在更新时填充,则可以在这里设置更新人字段
// 例如:this.strictInsertFill(metaObject, "updateUser", String.class, getLoginUser().getUsername());
}
}
```
3. **使用 `UpdateWrapper` 或 `LambdaUpdateWrapper`**:在进行更新操作时,可以使用 `UpdateWrapper` 或 `LambdaUpdateWrapper`,并设置 `eq` 方法来覆盖更新人字段。
```java
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.set("updateUser", updateUserValue).eq("id", id);
// 或者使用 LambdaUpdateWrapper
LambdaUpdateWrapper<User> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
lambdaUpdateWrapper.set(User::getUpdateUser, updateUserValue).eq(User::getId, id);
```
4. **使用 SQL 语句直接指定更新字段**:如果以上方法不适用,可以使用 MyBatis 的 `update` 方法,并直接在 SQL 语句中指定要更新的字段,从而覆盖自动填充的值。
```java
userMapper.update(user, new UpdateWrapper<User>().eq("id", user.getId()).set("updateUser", updateUserValue));
```
通过上述方法,你可以控制是否自动填充更新人字段,并且在需要的时候传入自己设定的值。
阅读全文