操作数据库映射实体类时,通常需要记录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: mysqlshow-sql: truehibernate:ddl-auto: updatedatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: rootpassword:

新建个普通的实体类。

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 {@AutowiredPostRepository 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也是不会更改的。

Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate相关推荐

  1. IDEA下SpringDataJPA加入jpa 后实体类出现报错问题

    IDEA下SpringDataJPA加入jpa 后实体类出现报错问题 完成上述操作后即可在View --> Tool Windows下看到 Persistence选项,将其打开 在左下角弹出的P ...

  2. IDEA工作笔记-自动生成POJO或JPA的实体类

    今天要要搞一个小后端,发现有些表有100多个域.就想着有没有自动生产的工具! 后面百度了下,发现有,在此记录下. 首先是要连接数据库: 右上角有Database 选择+号添加一个数据库: 然后进去后输 ...

  3. @NamedEntityGraphs --JPA按实体类对象参数中的字段排序问题得解决方法

    JPA按实体类对象参数中的字段排序问题得解决方法@Entity @Table(name="complaints") @NamedEntityGraphs({ @NamedEntit ...

  4. 解决springdatajpa 在解析实体类的字段时候驼峰自动转为下划线问题

    解决springdatajpa 在解析实体类的字段时候驼峰自动转为下划线问题 问题描述 springboot 在配置jpa时,利用idea自带工具逆向工程生成实体类,结果在调用findOne的时候,报 ...

  5. 向mysql表中插入/更新数据时自动添加创建时间/更新时间

    目录 处理方式一:修改数据库字段类型 测试插入数据: 测试更新数据: 处理方式二:配置生成策略 [MySQL版本] 8.x 处理方式一:修改数据库字段类型 自动添加创建时间: 将字段类型设置为TIME ...

  6. Mysql 添加 create_time, update_time 创建时间 更新时间 自动更新

    # 添加 创建 更新 时间字段 ALTER TABLE `表名` ADD COLUMN `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAM ...

  7. mysql创建与更新时间字段

    http://blog.sina.com.cn/s/blog_672b419f0101k63f.html DATETIME类型用在你需要同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-M ...

  8. 实体类blob类型_Mysql的数据类型和JPA的实体类

    ​MySQL中定义数据字段的类型对你数据库的优化是非常重要的.MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 Int,4字节,(-2147483648,21 ...

  9. MybatisPlus忽略实体类中的非数据库字段、JPA忽略实体类中的非数据库字段、HeHibernate忽略实体类中的非数据库字段

    mybatis plus忽略映射字段时可以在实体类属性上使用以下注解: @TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的. @TableField(e ...

  10. generator代码自动生成工具(动态生成注释、类注解、方法注解等)适用于swagger等需要配置实体类的场景

    generator代码生成器大家都不陌生,但是在实际的业务场景中,实体类只有属性.getter/setter方法不满足需求,还需要手动去添加需要的功能.比如项目使用swagger生成api文档时,需要 ...

最新文章

  1. Ubuntu里面一些权限问题
  2. 程序员眼中的电脑和空调 | 每日趣闻
  3. 脚本中export不起作用的原因分析
  4. Ant打可执行jar包指南
  5. 东芝移动硬盘拆解图_华为Mate40系列新技术曝光:海思闪存亮相,性能超三星东芝...
  6. 一个好的MIS系统应该考虑哪些内容
  7. mysql分组获取其他字段_sqlserver group by后获取其他字段(多种方法)
  8. Linux关于Sendmail配置错误的问题
  9. 【ElasticSearch】Es 启动流程 源码分析
  10. 进位和借位问题的研究
  11. sqlserver2005 openRowSet 和row_Number
  12. 图(一):图的邻接表表示
  13. 用python调用r包
  14. 集合竞价选股(附源码)
  15. java游戏妖魔兽_妖1.17正式版下载
  16. 代码检查工具系列——CheckStyle
  17. 谷歌Chrome浏览器离线安装包
  18. kali linux 安装谷歌浏览器
  19. vivo手机html有吗,vivo手机有哪些系列?区别是什么?
  20. 别人笑我太疯癫,我笑他人看不穿。

热门文章

  1. word文档批量处理表格
  2. spring加载流程之AnnotatedBeanDefinitionReader
  3. 专业级游戏测试书上架:精通游戏测试(第3版)
  4. 浅析dToF和iToF
  5. WEB安全(十六)单点登录的基本实现
  6. 计算机老师为什么不用伽卡他卡做文件服务器?
  7. 达梦数据库DM8支持Seata事务框架
  8. Computer Vision_3D Reconstruction_Point Cloud(计算机视觉三维重建点云点云配准)
  9. xml分页php采集,海洋cms自动采集脚本可分页
  10. !impotent的标准支持