时间:2021-05-20
一般来说创建时间和修改时间 两个字段是一个实体类必备的。
在阿里Java开发手册中也对此的说明:
【强制】表必备三字段:id, create_time, update_time。
说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。create_time, update_time 的类型均为 datetime 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新。
mysql 实现添加时间自动添加更新时间自动更新
在JPA 中也是支持新的数据保存是自动写入创建时间,当数据有修改时 自动记录修改时间。在SpringBoot 的启动类上加 @EnableJpaAuditing 来开启时间的支持, 在字段上使用 @CreatedDate 和@LastModifiedDate 注解来即可完成时间的自动更新。
由于这两个字段所有实体类都有,所以可以将它们抽取到一个通用的类里面,其他实体类需要时直接继承即可。
/** * 所有类的超类 * 自动更新创建时间和更新时间 * * @author peter * **/@MappedSuperclass@EntityListeners(value = AuditingEntityListener.class)@Getter@Setterpublic abstract class AbstractBaseTimeEntity { @CreatedDate @Column(nullable = false, updatable = false) private LocalDateTime createTime; @LastModifiedDate @Column() private LocalDateTime updateTime;}@Entity@Datapublic class StudentEntity extends AbstractBaseTimeEntity { ....}补充:Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate
操作数据库映射实体类时,通常需要记录createTime和updateTime,如果每个对象新增或修改去都去手工操作创建时间、更新时间,会显得比较繁琐。
Springboot jpa提供了自动填充这两个字段的功能,简单配置一下即可。@CreatedDate、@LastModifiedDate、@CreatedBy、@LastModifiedBy前两个注解就是起这个作用的,后两个是设置修改人和创建人的,这里先不讨论。
首先,我们的很多实体类都是需要创建时间和更新时间的,我们不想在每个实体类里都去定义这两个字段,那么我们把它抽取到基类中,让实体类去继承它。
package com.tianyalei.testautotime.entity;import org.springframework.data.annotation.CreatedDate;import org.springframework.data.annotation.LastModifiedDate;import org.springframework.data.jpa.domain.support.AuditingEntityListener;import javax.persistence.*;/** * Created by wuwf on 17/4/21. */@MappedSuperclass@EntityListeners(AuditingEntityListener.class)public abstract class BaseEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) protected Integer id;@CreatedDateprivate Long createTime;@LastModifiedDateprivate Long updateTime;public Integer getId() { return id;}public void setId(Integer id) { this.id = id;}public Long getCreateTime() { return createTime;}public void setCreateTime(Long createTime) { this.createTime = createTime;}public Long getUpdateTime() { return updateTime;}public void setUpdateTime(Long updateTime) { this.updateTime = updateTime;}}AuditingEntityListener标签开启后,下面的时间标签才会生效。
然后还需要在启动类加上@EnableJpaAuditing注解。
做完这些,我们来测试一下,新建个Springboot项目,配置一下数据库信息
spring: jpa: database: mysql show-sql: true hibernate: ddl-auto: update datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/test username: root password:新建个普通的实体类。
package com.tianyalei.testautotime.entity;import javax.persistence.Entity;@Entitypublic class Post extends BaseEntity {private String title;public String getTitle() { return title;}public void setTitle(String title) { this.title = title;}}测试类:
import com.tianyalei.testautotime.entity.Post;import com.tianyalei.testautotime.repository.PostRepository;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)@SpringBootTestpublic class TestautotimeApplicationTests { @Autowired PostRepository postRepository;@Testpublic void save() { Post post = new Post(); post.setTitle("title0"); postRepository.save(post);}// @Test// public void update() {// Post post = postRepository.findOne(1);// post.setTitle(“title1”);// postRepository.save(post);// }}先试试新增。
可以看到已经被自动赋值了。
然后试试update,将上面的update的注释放开。
可以看到更新时间也自动修改了。
需注意,如果你没有修改任何字段的值的话,即便走了save方法,updateTime也是不会更改的。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在Word2013文档中插入日期和时间,如何实现自动更新,下面小编就给大家介绍一下Word2013中自动更新文档中的日期和时间的方法,而且,使用这个办法还可以插
在数据库使用中经常使用到时间字段。常用的有创建时间和更新时间。然而在使用中想要创建时间在创建的时候自动设置为当前时间,更新时间在更新时自动更新为当前时间。创建表
word邀请函日期自动更新的方法: 1、首先,选择需要插入日期的位置,左键单击。 2、点击面板中,插入下面的日期和时间。 3、在打开的日期和时间的对话框中
自动更新统计信息的基本算法是:·如果表格是在tempdb数据库表的基数是小于6,自动更新到表的每个六个修改。·如果表的基数是大于6,但小于或等于500,更新状态
数据库表的创建时间、修改时间,这些个操作一遍都是自动化完成的,我们不希望手动更新。这时候自动填充便可以发挥作用了。1、方式一数据库级别(注意:不建议此方式,因为