在操作Mysql数据库一些字段的时候经常会存在以下问题
1: 忘记设计字段的默认值
2: 日期字段设置了自动更新,但是记录修改后设置自动更新的日期字段未发生变化
(导致原因:a:属性拷贝时直接拷贝了原始原始日期值;b: 查询原纪录后,只修改了其中部分值,更新时间未设置为null或最新日期值,使用的还是原始记录的更新时间值)
针对以上问题解决方式,下面以数据库中update_time更新时间字段为例:
一: 通过注解方式
@TableField(fill = FieldFill.UPDATE, update = "NOW()")
/** * 行修改时间 * 该注解可以设置更新时间为数据库服务器当前时间 * 更新操作均适用 * update/saveOrUpdate/saveOrUpdateBatch/updateById/updateBatchById */ @JsonFormat (pattern = "yyyy-MM-dd HH:mm:ss" ) @TableField (fill = FieldFill.UPDATE, update = "NOW()" ) private LocalDateTime updateTime; |
二: 注解 + 组件
@TableField(fill = FieldFill.INSERT_UPDATE) + MetaObjectHandler
/** * 行修改时间 * 插入和更新时填充字段 */ @JsonFormat (pattern = "yyyy-MM-dd HH:mm:ss" ) @TableField (fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateTime; |
import cn.hutool.core.date.DateUtil; import cn.hutool.core.date.LocalDateTimeUtil; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; /** * @author louis * @description: 元对象字段填充控制器实现类,实现公共字段自动写入 * @date 2022-10-31 * @version 1.0 */ @Component public class MybatisplusHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this .setFieldValByName( "updateTime" , LocalDateTimeUtil.now(), metaObject); } @Override public void updateFill(MetaObject metaObject) { this .setFieldValByName( "updateTime" , LocalDateTimeUtil.now(), metaObject); } } |