网站做优化的好处网络营销团队
文章目录
一、前言
二、导入依赖
三、构造抽象类
四、实现MetaObjectHandle接口
五、版本兼容性问题
六、总结
一、前言
在业务开发时——每次数据更新或新增时都需要特意得去修改时间,总是进行这种繁琐的操作,给很多后端开发人员造成了很大得困扰。
这一期我们就帮大家解决掉这个问题,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 {@Overridepublic void insertFill(MetaObject metaObject) {// 使用严格模式插入填充,如果字段为null则进行填充this.strictInsertFill(metaObject, "created", Date.class, new Date()); // 创建时间this.strictInsertFill(metaObject, "updated", Date.class, new Date()); // 更新时间}@Overridepublic 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 {@Overridepublic 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);}}@Overridepublic void updateFill(MetaObject metaObject) {//更新数据时,更新字段setFieldValByName("updated",new Date(),metaObject);}
}
六、总结
至此,自动填充功能,圆满实现。大家快去试试吧!!!