首页 > 技术文章 > 数据库表时间字段自动更新

king-dom 2022-01-21 16:13 原文

在阿里的java开发手册中提到表必备三字段

 

 

那么我们怎么实现这两个字段的自动更新呢
 
数据库设置其为自动更新(这种方式不建议使用,在正常开发中我们一般没有相关权限)
 
给create_time字段设置默认属性CURRENT_TIMESTAMP
 

 

给update_time设置默认属性CURRENT_TIMESTAMP,并让他根据当前时间戳更新
 

 

 

在开发中使用相关插件帮我们实现: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);
    }

 

 

推荐阅读