mysql 自动填充字段_MyBatisPlus中使用 @TableField完成字段自动填充

场景

官方文档:

字段注解 @TableField

com.baomidou.mybatisplus.annotations.TableField

描述value

字段值(驼峰命名方式,该值可无)

update

预处理 set 字段自定义注入

condition

预处理 WHERE 实体条件自定义运算规则

el

详看注释说明

exist

是否为数据库表字段( 默认 true 存在,false 不存在 )

strategy

字段验证 ( 默认 非 null 判断,查看 com.baomidou.mybatisplus.enums.FieldStrategy )

fill

字段填充标记 ( FieldFill, 配合自动填充使用 )

字段填充策略 FieldFill

描述DEFAULT

默认不处理

INSERT

插入填充字段

UPDATE

更新填充字段

INSERT_UPDATE

插入和更新填充字段

实现

实体类中有如下属性,通过上面的自动填充属性,我们可以实现

在进行插入操作时对

添加了注解@TableField(fill = FieldFill.INSERT)

的字段进行自动填充。

对添加了注解@TableField(fill = FieldFill.INSERT_UPDATE)

的字段在进行插入和更新时进行自动填充。

/**

* 创建人

*/

@TableField(fill = FieldFill.INSERT)

private Long creatorId;

/**

* 创建时间

*/

@TableField(fill = FieldFill.INSERT)

private Date gmtCreat;

/**

* 修改人

*/

@TableField(fill = FieldFill.INSERT_UPDATE)

private Long modifierId;

/**

* 修改时间

*/

@TableField(fill = FieldFill.INSERT_UPDATE)

private Date gmtModified;

/**

* 是否可用

*/

@TableField(fill = FieldFill.INSERT)

private Boolean availableFlag;

这样我们在具体业务中对实体类进行赋值就可以不用对这些公共字段进行赋值,在执行插入或者更新时就能自动赋值并插入数据库。

那么要自动赋的值在哪里配置?

在项目的config包下新建自动填充处理类使其实现接口MetaObjectHandler

并重写其方法:

package com.ws.api.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import org.apache.ibatis.reflection.MetaObject;

import org.springframework.stereotype.Component;

import java.util.Date;

/**

* 自动填充处理类

* @author badao

* @version 1.0

* @see

**/

@Component

public class MyMetaObjectHandler implements MetaObjectHandler {

@Override

public void insertFill(MetaObject metaObject) {

this.setFieldValByName("modifierId", new Long(111), metaObject);

this.setFieldValByName("gmtModified", new Date(), metaObject);

this.setFieldValByName("creatorId", new Long(111), metaObject);

this.setFieldValByName("gmtCreat",new Date(), metaObject);

this.setFieldValByName("availableFlag",true, metaObject);

}

@Override

public void updateFill(MetaObject metaObject) {

this.setFieldValByName("modifierId", new Long(111), metaObject);

this.setFieldValByName("gmtModified", new Date(), metaObject);

}

}

其中方法参数中第一个是前面自动填充所对应的字段,第二个是要自动填充的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MybatisPlus自动填充可以通过实现MetaObjectHandler接口来实现。具体步骤如下: 1. 创建一个类实现MetaObjectHandler接口,并重写其的方法,例如: ``` @Component public class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime", new Date(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime", new Date(), metaObject); } } ``` 2. 在实体类使用@TableField注解标注需要自动填充字段,例如: ``` public class User { @TableId(type = IdType.AUTO) private Long id; private String name; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; // 省略getter和setter方法 } ``` 3. 在MybatisPlus配置文件配置自动填充处理器,例如: ``` @Configuration public class MybatisPlusConfig { @Autowired private MyMetaObjectHandler myMetaObjectHandler; @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); interceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); return interceptor; } @Bean public GlobalConfig globalConfig() { GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setMetaObjectHandler(myMetaObjectHandler); return globalConfig; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值