一 效果
在新增user表的数据时,createtime为null

使用mybatis-plus自带的save方法新增后,在数据库中有自动插入的当前时间的值

二 实现原理
metaobjecthandler:元数据对象处理器
说明:
metaobjecthandler接口是mybatisplus为我们提供的的一个扩展接口,我们可以利用这个接口在我们插入或者更新数据的时候,为一些字段指定默认值。
使用场景:
公共字段填充,如updatetime、createtime、createuser、updateuser等公共字段的填充。
三 使用步骤
在实体类的公共字段上添加@tablefield注解
@tablefield(fill = fieldfill.insert):表示此字段只在插入/新增操作时更新数据;@tablefield(fill = fieldfill.insert_update):表示此字段在新增和修改操作时都更新数据;@tablefield(fill = fieldfill.update):表示此字段只在修改操作时更新数据;
如下面代码中,createtime,updatetime,createuser都会在新增时更新数据,updatetime还会在修改时更新数据
@tablename(value = "article")
@data
public class article implements serializable {
/**
* id
*/
@tableid(type = idtype.assign_uuid)
private string id;
/**
* 图片地址
*/
private string pictureurl;
/**
* 标题
*/
private string title;
/**
* 创建时间
*/
@tablefield(fill = fieldfill.insert)
private string createtime;
/**
* 修改时间
*/
@tablefield(fill = fieldfill.insert_update)
private string updatetime;
/**
* 创建人
*/
@tablefield(fill = fieldfill.insert)
private string createuser;
@tablefield(exist = false)
private static final long serialversionuid = 1l;
}
创建配置类实现metaobjecthandler接口
实现metaobjecthandler接口,重写insertfill、updatefill方法
使用接口中的setfieldvalbyname方法,找到我们之前的几个字段,并给字段赋值
不要忘记@component 注解
如下代码:
@component
public class mymetaobjecthandler implements metaobjecthandler {
@override
public void insertfill(metaobject metaobject) {
this.setfieldvalbyname("createtime", new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new date()), metaobject);
this.setfieldvalbyname("updatetime", new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new date()), metaobject);
this.setfieldvalbyname("createuser", currrentuser.getnickname(), metaobject);
}
@override
public void updatefill(metaobject metaobject) {
this.setfieldvalbyname("updatetime", new simpledateformat("yyyy-mm-dd hh:mm:ss").format(new date()), metaobject);
}
}
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论