使用Mybatis-Plus实现往数据库种插入数据时指定字段的数据自动填充

问题场景

  • 在数据库的插入或者更新操作时,有时候需要自动填充。考虑一个场景,数据库种有两个字段分别是“create_time”和“update_time”我们需要在插入数据的时候自动记录插入数据的时间,也需要在对数据有任何更新操作时,自动记录更新数据的时间。
  • 上面举出了最常用的自动填充的场景。下面的解决方案也是针对这个场景,其他的场景可以用同样的思路解决。

解决方案

  • 思路分析:思考如何自动填充的问题需要具体解决如下几个问题:
  1. 那些字段需要自动填充?
  2. 这些字段在什么时候自动填充?(第一次插入数据的时候,还是数据有更新的时候等等)
  3. 自动填充的时候填充什么内容?
  • 解决第1、2个问题就是在实体类上需要自动填充的属性(字段)上添加注解,并且指定自动填充的策略。
  • gmtCreate字段 指创建时间
  • gmtModified字段 指修改时间
  • @TableField(fill = FieldFill.INSERT) 注解 指该字段使用自动填充,自动填充的策略是FieldFill.INSERT,即数据插入的时候自动填充
  • @TableField(fill = FieldFill.INSERT_UPDATE) 注解 指该字段使用自动填充,自动填充的策略是FieldFill.INSERT_UPDATE,即数据插入和更新的时候自动填充
@TableField(fill = FieldFill.INSERT)
private Date gmtCreate;

@TableField(fill = FieldFill.INSERT_UPDATE)
private Date gmtModified;
  • 解决第3个问题:自定义一个组件实现MetaObjectHandler,用来指定自动填充时自动插入(更新)数据库的内容,也就是如何按照我们的意愿往数据库里边自动填充东西 ,这需要我们自己定义。
  • 代码如下:
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        //属性名
        this.setFieldValByName("gmtCreate", new Date(), metaObject);
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("gmtModified", new Date(), metaObject);
    }
}
  • 如此一来,时候使用Mybatis-Plus操作数据库就不要考虑自动填充的字段,那些字段会自动生成相关的数据。
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值