【Mybatis-Plus】之字段值自动填充 落日映苍穹つ 2023-01-07 03:53 162阅读 0赞 ## 一、场景 ## -------------------- 当我们使用 MybatisPlus 操作数据时,会遇到有些表的字段值是可以自动填充的场景,比如我们的 `create_time` 和 `update_time` 字段,这些字段值记录的是时间值,如果每次操作都要手动填写的话不仅麻烦而且代码也很臃肿,所以 MybatisPlus 为我们提供了 `@TableField` 注解来实现自定义自动填充的功能。 下面介绍如何使用和配置我们的自动填充规则。 ## 二、实战 ## -------------------- #### 1、引入依赖 #### <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> #### 2、配置字段 #### 在表对应的实体类中需要自动填充的字段上面添加 `@TableField` 注解: public class Demo { /** * 创建时间 */ @TableField(fill = FieldFill.INSERT) private Date createTime; /** * 更新时间 */ @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; } 其中我们使用了注解中的 `fill` 属性(字段自动填充策略): * `FieldFill.INSERT`:表示插入时填充字段; * `FieldFill.INSERT_UPDATE`:表示插入和更新时填充字段; 具体更多属性值我们可以查看 `FieldFill` 的源码: public enum FieldFill { /** * 默认不处理 */ DEFAULT, /** * 插入时填充字段 */ INSERT, /** * 更新时填充字段 */ UPDATE, /** * 插入和更新时填充字段 */ INSERT_UPDATE } #### 3、配置填充规则 #### 配置完字段之后,MybatisPlus 在自动填充时是不知道应该填充什么值的,需要我们定义填充规则才能完成自动填充功能,下面是自定义填充规则的实例代码: import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MyBatisMetaObjectHandler implements MetaObjectHandler { /** * 自定义插入时填充规则 */ @Override public void insertFill(MetaObject metaObject) { // 注意是类属性字段名称,不是表字段名称 this.setFieldValByName("createTime", new Date(), metaObject); this.setFieldValByName("updateTime", new Date(), metaObject); } /** * 自定义更新时填充规则 */ @Override public void updateFill(MetaObject metaObject) { // 注意是类属性字段名称,不是表字段名称 this.setFieldValByName("updateTime", new Date(), metaObject); } } 在这里,我们通过实现 `MetaObjectHandler` 接口类的 `insertFill` 方法和 `updateFill` 方法来实现自动填充功能: * `insertFill` 方法指定了在插入值时如何自动填充字段值,而 `updateFill` 方法则指定了在更新值时如何自动填充字段值; * 通过调用 `MetaObjectHandler` 的 `setFieldValByName` 方法实现字段值的填充,第一个参数为类属性的字段名称,第二个参数为字段要填充的值。 配置好后,当 MybatisPlus 插入和更新数据库时就会字段为我们填充指定的字段值。
还没有评论,来说两句吧...