重现步骤
1、定义一个User类,并设置好setter和getter
@TableName("sys_user")
public class User{
@TableId(value = "UUID",type = IdType.UUID)
private Long id;
@TableField("user_name")
private String name;
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
//setter & getter ...
}
2、测试代码
(1)插入时,没有给表中的update_time字段设置值
User user = new User();
user.setName("tom");
int result = userMapper.insert(user);
Assert.assertEquals(1, result);
(2)更新时,也没有给表中的update_time字段设置值
User user = new User();
user.setId(1005025463877996546L);
user.setName("tom-1");
int result = userMapper.updateById(user);
Assert.assertEquals(1, result);
[color=darkred]
[color=red]
解决办法
还需要实现 MetaObjectHandler 接口,并将该类作为Bean配置到 Spring 容器中。我用的是Springboot,写法如下:
@SilenceDN
public class MybatisObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
setFieldValByName("createTime", LocalDateTime.now(),metaObject);
setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
}
}
分享到:
相关推荐
4. **填充公共字段**:通过 `@TableField(fill = FieldFill.INSERT)` 或 `@TableField(fill = FieldFill.UPDATE)` 注解,可以在插入或更新时自动填充某些公共字段,如创建时间、修改时间等。 5. **分页查询**:...
- **自动填充**:通过 `@TableField(fill = FieldFill.INSERT)` 或 `@TableField(fill = FieldFill.UPDATE)` 注解,可以自动在插入或更新时填充特定字段,如创建时间和修改时间。 - **关联查询**:使用 `@One`,`@...
通过在实体类中添加注解`@TableField(fill = FieldFill.INSERT)`或`@TableField(fill = FieldFill.UPDATE)`来实现。例如: ```java import com.baomidou.mybatisplus.annotation.FieldFill; import ...
3. **填充公共字段**:在插入或更新数据时,可以通过`@TableField(fill = FieldFill.INSERT)`或`@TableField(fill = FieldFill.INSERT_UPDATE)`注解指定需要填充的字段,如创建时间和修改时间等。 4. **分页查询**...
只需在实体类中定义对应的注解,如@TableField(fill = FieldFill.INSERT)或@TableField(fill = FieldFill.UPDATE),Mybatis-plus就会在插入或更新时自动填充这些字段。 3. **主键策略**:Mybatis-plus提供了多种...
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Date updateTime; } ``` 同时,在Mapper接口的基类中配置填充处理器: ```java import ...
1. 自动填充:MP支持字段自动填充,如创建时间、更新时间等,只需在实体类中定义注解@TableField(fill = FieldFill.INSERT)。 2. 分页查询:MP内置了强大的分页插件,可以实现物理分页和逻辑分页,且支持多种数据库...
通过在实体类字段上添加注解`@TableField(fill = FieldFill.INSERT)`或`@TableField(fill = FieldFill.UPDATE)`,可以在插入或更新时自动填充这些字段。 2. **CRUD操作简化**: Mybatis-Plus提供了一键生成基础的...
@TableField(fill = FieldFill.INSERT_UPDATE) private String name; @TableLogic private Integer deleteFlag; } ``` `@TableId`注解指定了主键字段,`type=IdType.INPUT`表示主键值由外部输入。而`@Key...
@TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; } ``` 在上面的代码中,我们使用 `@TableField` 注解来指定自动注入时间。其中,`fill` 属性指定了自动注入的类型,我们可以...
- `fill`属性:用于指定在插入或更新时是否填充字段,如`@TableField(fill = FieldFill.INSERT)`表示在插入时填充该字段。 - `el`属性:用于定义SpEL表达式,例如在插入或更新时根据其他字段动态计算值。 总结来...
- Mybatis-Plus 支持自动填充创建时间和更新时间等公共字段,只需要在实体类的字段上使用 `@TableField(fill = FieldFill.INSERT/UPDATE)` 注解即可。 8. **逻辑删除**: - 通过 `@TableLogic` 注解,你可以实现...
- **自动填充**:使用`@TableField(fill = FieldFill.INSERT|UPDATE)`,可以在插入或更新时自动填充字段,如创建时间和更新时间。 - **主键自增**:对于主键类型为整型的字段,可以设置`@TableId(value = "id", type...
- MP支持自动填充字段,例如创建时间、更新时间和乐观锁版本号等,只需在实体类字段上添加注解`@TableField(fill = FieldFill.INSERT|UPDATE)`。 4. **条件构造器** - `QueryWrapper`和`UpdateWrapper`是条件构造...
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Date updateTime; } ``` 在Service层,MyBatisPlus提供了简单易用的接口,如插入、更新、删除...
例如,使用`@TableField(fill = FieldFill.INSERT)`和`@TableField(fill = FieldFill.INSERT_UPDATE)`注解,可以分别在插入和更新时自动设置时间字段。 在实体类中,`@TableId`注解用于指定主键字段,其`type`参数...
总结来说,Mybatis Plus在处理字段更新时遵循了不更新空值的策略,但可以通过`@TableField`注解的`fill`属性来改变这一行为,以满足特定场景的需求。对于希望在更新时保留字段原有值(包括NULL)的开发者,这是一个...
4. **填充公共字段**:通过`@TableField(fill = FieldFill.INSERT)`或`@TableField(fill = FieldFill.UPDATE)`,可以设置在插入或更新时自动填充某些字段。 5. **逻辑删除**:Mybatis Plus支持逻辑删除,只需在实体...