一、前言
在业务开发时——每次数据更新或新增时都需要特意得去修改时间,总是进行这种繁琐的操作,给很多后端开发人员造成了很大得困扰。
这一期我们就帮大家解决掉这个问题,mybatis-plus 提供了非常便捷的方式来实现这一功能,通过使用其内置的 metaobjecthandler 接口,实现新增日期和更改日期的快速填充,以此解放广大码农朋友的双手。
二、导入依赖
<!-- 内置mybatis-plus插件依赖 -->
<dependency>
<groupid>com.baomidou</groupid>
<artifactid>mybatis-plus-boot-starter</artifactid>
<version>3.4.2</version>
</dependency>
<!-- mysql -->
<dependency>
<groupid>mysql</groupid>
<artifactid>mysql-connector-java</artifactid>
<version>8.0.11</version>
</dependency>三、构造抽象类
后续所有的实体类,都可以继承这个基础的实体类,以提高代码的复用性
在需要自动创建更新的属性上,加上@tablefield注解
public abstract class basepojo {
//文件创建,自动填充。需要实现metaobjecthandle接口,进行处理
@tablefield(fill = fieldfill.insert)
private date created;
//文件更新,自动填充
@tablefield(fill = fieldfill.insert_update)
private date updated;
}四、实现metaobjecthandle接口
package com.tanhua.sso.handler;
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 mymetaobjecthandler implements metaobjecthandler {
@override
public void insertfill(metaobject metaobject) {
// 使用严格模式插入填充,如果字段为null则进行填充
this.strictinsertfill(metaobject, "created", date.class, new date()); // 创建时间
this.strictinsertfill(metaobject, "updated", date.class, new date()); // 更新时间
}
@override
public void updatefill(metaobject metaobject) {
// 使用严格模式更新填充,总是设置更新时间
this.strictupdatefill(metaobject, "updated", date.class, new date());
}
}五、版本兼容性问题
若业务中mybatis-plus版本较低,可能不含strict方法,可以采用以下写法
package com.tanhua.sso.handler;
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 mymetaobjecthandler implements metaobjecthandler {
@override
public void insertfill(metaobject metaobject) {
//字段为空,自动填充字段
object created = getfieldvalbyname("created", metaobject);
if(null==created){
setfieldvalbyname("created",new date(),metaobject);
}
object updated = getfieldvalbyname("updated", metaobject);
if(null==updated){
setfieldvalbyname("updated",new date(),metaobject);
}
}
@override
public void updatefill(metaobject metaobject) {
//更新数据时,更新字段
setfieldvalbyname("updated",new date(),metaobject);
}
}
六、总结
至此,自动填充功能,圆满实现。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论