• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Jpa 实现自动更新表中的创建日期和修改时间

java 搞代码 4年前 (2022-01-05) 37次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了Jpa 实现自动更新表中的创建日期和修改时间,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

一般来说创建时间和修改时间 两个字段是一个实体类必备的。

在阿里Java开发手册中也对此的说明:

【强制】表必备三字段:id, create_time, update_time。

说明:其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。create_time, update_time 的类型均为 datetime 类型,前者现在时表示主动式创建,后者过去分词表示被动式更新。

mysql 实现添加时间自动添加更新时间自动更新

在JPA 中也是支持新的数据保存是自动写入创建时间,当数据有修改时 自动记录修改时间。在SpringBoot 的启动类上加 @EnableJpaAuditing 来开启时间的支持, 在字段上使用 @CreatedDate 和@LastModifiedDate 注解来即可完成时间的自动更新。

实例:

 @EnableJpaAuditing @SpringBootApplication public class StudentApplication { public static void main(String[] arg<div style="color:transparent">来源gaodai.ma#com搞##代!^码网</div>s) { SpringApplication.run(StudentApplication.class, args); } } @EntityListeners(value = AuditingEntityListener.class) @Getter @Setter @Entity public class StudentEntity { .... @CreatedDate @Column(nullable = false, updatable = false) private LocalDateTime createTime; @LastModifiedDate @Column() private LocalDateTime updateTime; ... } 

由于这两个字段所有实体类都有,所以可以将它们抽取到一个通用的类里面,其他实体类需要时直接继承即可。

 /** * 所有类的超类 * 自动更新创建时间和更新时间 * * @author peter * **/ @MappedSuperclass @EntityListeners(value = AuditingEntityListener.class) @Getter @Setter public abstract class AbstractBaseTimeEntity { @CreatedDate @Column(nullable = false, updatable = false) private LocalDateTime createTime; @LastModifiedDate @Column() private LocalDateTime updateTime; } @Entity @Data public 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; @CreatedDate private Long createTime; @LastModifiedDate private 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; @Entity public 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) @SpringBootTest public class TestautotimeApplicationTests { @Autowired PostRepository postRepository; @Test public 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也是不会更改的。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持gaodaima搞代码网。如有错误或未考虑完全的地方,望不吝赐教。

以上就是Jpa 实现自动更新表中的创建日期和修改时间的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Jpa 实现自动更新表中的创建日期和修改时间

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址