目录
一、数据库
表中新增“添加时间”和“修改时间”字段;
二、实体类 Entity
在实体类中的“添加时间”和“修改时间”的属性字段中添加 @TableField(fill = FieldFill.INSERT),其中 FieldFill 中包含默认(DEFAULT), 插入(INSERT), 修改(UPDATE), 插入和修改(INSERT_UPDATE)你可以点进源码进行查看;
public class EduTeacher implements Serializable {
//注意!这里需要标记为填充字段
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
private Date gmtCreate;
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间")
private Date gmtModified;
}
三、 公共类
采用AOP的思想,实现 MetaObjectHandler接口,并实现其中的 insertFill 和 updateFill 方法,如下:
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @description:
* @author: zzx
* @createDate: 2020/6/1
* @version: 1.0
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ....");
//属性名称,不是字段名称
this.strictInsertFill(metaObject, "gmtCreate", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
//this.fillStrategy(metaObject, "gmtCreate", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
/* 上面选其一使用,下面的已过时(注意 strictInsertFill 有多个方法,详细查看源码) */
//this.setFieldValByName("gmtCreate",new Date(),metaObject);
//this.setFieldValByName("gmtModified",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "gmtModified", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
//this.fillStrategy(metaObject, "gmtModified", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug请升级到之后的版本如`3.3.1.8-SNAPSHOT`)
/* 上面选其一使用,下面的已过时(注意 strictUpdateFill 有多个方法,详细查看源码) */
//this.setUpdateFieldValByName("gmtModified", LocalDateTime.now(), metaObject);
//this.setFieldValByName("gmtModified",new Date(),metaObject);
}
}
注意事项:
【1】字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段
【2】填充处理器MyMetaObjectHandler在 Spring Boot 中需要声明@Component或@Bean注入
【3】要想根据注解FieldFill.xxx和字段名以及字段类型来区分必须使用父类的strictInsertFill或者strictUpdateFill方法
【4】不需要根据任何来区分可以使用父类的fillStrategy方法
四、MyBatisPlus 依赖(一般项目中都有,你可能不需要)
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<scope>provided </scope>
</dependency>
五、测试
【1】测试请求
【2】数据库结果
---高级程序员资料,关注公众号获取---