数据库表时间字段自动更新
在阿里的java开发手册中提到表必备三字段
那么我们怎么实现这两个字段的自动更新呢
-
数据库设置其为自动更新(这种方式不建议使用,在正常开发中我们一般没有相关权限)
- 给create_time字段设置默认属性
CURRENT_TIMESTAMP
- 给update_time设置默认属性
CURRENT_TIMESTAMP
,并让他根据当前时间戳更新
- 给create_time字段设置默认属性
-
在开发中使用相关插件帮我们实现:mybatis-plus
-
在实体类中增加注解
@TableField(fill = FieldFill.INSERT) private Date createTime ; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
其他相关注解:(这是源码中的解释)
// 默认不处理 DEFAULT, // INSERT, // UPDATE, // INSERT_UPDATE
-
编写处理器来处理这个注解
package com.xht.handler; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component @Slf4j public class MyMeta0bjectHandler implements MetaObjectHandler { //插入时填充 @Override public void insertFill(MetaObject metaObject) { log.info("====>start insert fill....."); this.setFieldValByName("createTime",new Date(),metaObject); this.setFieldValByName("updateTime",new Date(),metaObject); } //更新时填充 @Override public void updateFill(MetaObject metaObject) { log.info("====>start update fill....."); this.setFieldValByName("updateTime",new Date(),metaObject); } }
-
测试是否成功
@Test void updateTest() { // 修改 User user = new User(); user.setName("xxx"); user.setId(1265091801774092290L); user.setAge(18); int i = userMapper.updateById(user); System.out.println("受影响的行数======>"+i); } @Test void addTest() { // 添加 User user = new User(); user.setName("小明"); user.setAge(2); user.setEmail("6666666@qq.com"); userMapper.insert(user); }
-