给表添加创建时间,修改时间字段

有时间我们需要指定表的某一行记录的创建时间,和最后更新时间。
但是我们又不主动 set 这个时间,则可以使用下面方式自动创建,更新时间。

SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DROP TABLE  IF EXISTS `course`;

CREATE TABLE `course` (
`id` INT ( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`course_name` VARCHAR ( 255 ) DEFAULT NULL,
`create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE = INNODB AUTO_INCREMENT = 10 DEFAULT CHARSET = utf8;


---------------------------
-----以下为 SQL测试---------
---------------------------
INSERT INTO course VALUES(NULL,NULL,NULL,NULL);-- id 自增,其他为 null
INSERT INTO course VALUES(NULL,"语文",NULL,NULL);-- id 自增,course_name 语文,其他为 null
INSERT INTO course(course_name) VALUES("数学");-- id 自增,course_name 数学,创建/修改时间为当前时间
INSERT INTO course(course_name) VALUES("英语");-- id 自增,course_name 英语,创建/修改时间为当前时间

UPDATE course SET course_name="英语-1" where id=13;-- course_name 英语-1,修改时间为当前时间,创建时间不变

代码

entity

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
* 测试 DB createTime updateTime
*
* @author 陶攀峰
* @date 2021/3/22 下午3:24
*/
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
@TableName("course")
public class CourseEntity implements Serializable {
private static final long serialVersionUID = 1L;

@TableId(type = IdType.AUTO)
private Integer id;
private String courseName;
private Date createTime;
private Date updateTime;

}

dao

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.decathlon.easypromo.entity.CourseEntity;
import org.apache.ibatis.annotations.Mapper;

/**
* 测试 DB createTime updateTime
*
* @author 陶攀峰
* @date 2021/3/22 下午3:24
*/
@Mapper
public interface CourseDao extends BaseMapper<CourseEntity> {

}

mapper.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.decathlon.easypromo.dao.CourseDao">

<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.decathlon.easypromo.entity.CourseEntity" id="courseMap">
<result property="id" column="id"/>
<result property="courseName" column="course_name"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
</resultMap>


</mapper>

App

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.decathlon.easypromo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
* 主启动类
*
* @author 陶攀峰
* @version 1.0
* @date 2021-03-03 09:51
*/
@SpringBootApplication
@MapperScan("com.decathlon.easypromo.dao")
public class App {

public static void main(String[] args) {
SpringApplication.run(App.class, args);
}

}

test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import cn.hutool.json.JSONUtil;
import com.decathlon.easypromo.dao.CourseDao;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;

/**
* 单元测试类
*
* @author 陶攀峰
* @version 1.0
* @date 2021-03-03 09:51
*/
@SpringBootTest
class AppTests {

@Resource
private CourseDao courseDao;

@Test
void test_db_time() {
//courseDao.insert(new CourseEntity(null, "1", null, null));
//10 11 2021-03-22 07:22:05 2021-03-22 07:22:05

//courseDao.updateById(new CourseEntity(10, "11", null, null));
//10 11 2021-03-22 07:22:05 2021-03-22 07:23:21
}
}