• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解Spring data 定义默认时间与日期的实例

    详解Spring data 定义默认时间与日期的实例

    前言:

    需求是这样的:

    1. 创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直。另外防止人为插入自定义时间时间。

    2. 插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改。

     3. 记录创建后更新日志字段为默认为 null 表示该记录没有被修改过。一旦数据被修改,修改日期字段将记录下最后的修改时间。

    4. 甚至你可以通过触发器实现一个history 表,用来记录数据的历史修改,详细请参考作者另一部电子书《Netkiller Architect 手札》数据库设计相关章节。

    10.1.6. 默认时间规则

    10.1.6.1. CreatedDate

    Spring 提供了 import org.springframework.data.annotation.CreatedDate;

    但是这些只能作用于实体类。

    @CreatedDate
      private Date createdDateTime;

    10.1.6.3. 数据库级别的默认创建日期时间定义

    package cn.netkiller.api.domain.elasticsearch;
    
    import java.util.Date;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table
    public class ElasticsearchTrash {
     @Id
     private int id;
    
     @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
     private Date ctime;
    
     public int getId() {
     return id;
     }
    
     public void setId(int id) {
     this.id = id;
     }
    
     public Date getCtime() {
     return ctime;
     }
    
     public void setCtime(Date ctime) {
     this.ctime = ctime;
     }
    
    }
    
    

    对应数据库DDL

    CREATE TABLE `elasticsearch_trash` (
     `id` int(11) NOT NULL,
     `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    10.1.6.4. 数据库级别的默认创建日期与更新时间定义

    需求是这样的:

    1. 创建时间与更新时间只能由数据库产生,不允许在实体类中产生,因为每个节点的时间/时区不一定一直。另外防止人为插入自定义时间时间。

    2. 插入记录的时候创建默认时间,创建时间不能为空,时间一旦插入不允许日后在实体类中修改。

    3. 记录创建后更新日志字段为默认为 null 表示该记录没有被修改过。一旦数据被修改,修改日期字段将记录下最后的修改时间。

    4. 甚至你可以通过触发器实现一个history 表,用来记录数据的历史修改,详细请参考作者另一部电子书《Netkiller Architect 手札》数据库设计相关章节。

    package cn.netkiller.api.domain.elasticsearch;
    
    import java.util.Date;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    import javax.validation.constraints.Null;
    
    @Entity
    @Table
    public class ElasticsearchTrash {
     @Id
     private int id;
    
     // 创建时间
     @Column(insertable = false, updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
     private Date ctime;
     
     // 修改时间
     @Column(nullable = true, insertable = false, updatable = false, columnDefinition = "TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP")
     private Date mtime;
    
     public int getId() {
     return id;
     }
    
     public void setId(int id) {
     this.id = id;
     }
    
     public Date getCtime() {
     return ctime;
     }
    
     public void setCtime(Date ctime) {
     this.ctime = ctime;
     }
    
     public Date getMtime() {
     return mtime;
     }
    
     public void setMtime(Date mtime) {
     this.mtime = mtime;
     }
    
    }
    
    

    对应数据库DDL

    CREATE TABLE `elasticsearch_trash` (
     `id` int(11) NOT NULL,
     `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
     `mtime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    

    10.1.6.5. 最后修改时间

    需求:记录最后一次修改时间

    package cn.netkiller.api.domain.elasticsearch;
    
    import java.util.Date;
    
    import javax.persistence.Column;
    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;
    
    @Entity
    @Table
    public class ElasticsearchTrash {
     @Id
     private int id;
    
     @Column(columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
     private Date lastModified;
    
    }
    
    

    产生DDL语句如下

    CREATE TABLE `elasticsearch_trash` (
     `id` int(11) NOT NULL,
     `ctime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
     PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
     
    
    

    以上就是Spring data 定义默认时间与日期的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    您可能感兴趣的文章:
    • Spring Boot中使用Spring-data-jpa实现数据库增删查改
    • Spring Data JPA实现动态查询的两种方法
    • Spring Data JPA 简单查询--方法定义规则(详解)
    • 基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
    • SpringBoot集成Spring Data JPA及读写分离
    • springboot整合spring-data-redis遇到的坑
    上一篇:详解Spring Controller autowired Request变量
    下一篇:jsp 开发之struts2中s:select标签的使用
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解Spring data 定义默认时间与日期的实例 详解,Spring,data,定义,默认,