SpringBoot+JPA实体自动生成数据库

POM

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
  • 引入SpringBoot
  • 引入Jpa

配置

1
2
3
4
spring.jpa.database=mysql
spring.jpa.database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
# 自动检查实体和数据库表是否一致,如果不一致则会进行更新数据库表
spring.jpa.hibernate.ddl-auto=update
  • MySQL5InnoDBDialect数据库引擎
  • ddl-auto

    • validate 加载 Hibernate 时,验证创建数据库表结构
    • create 每次加载 Hibernate ,重新创建数据库表结构
    • create-drop 加载 Hibernate 时创建,sessionFactory关闭退出时删除表结构
    • update 加载 Hibernate 自动更新数据库结构

      开启

      1
      2
      3
      4
      5
      6
      7
      8
      @SpringBootApplication
      //自动填充或更新实体中的CreateDate、CreatedBy
      @EnableJpaAuditing
      public class Startup {
      public static void main(String[] args) {
      SpringApplication.run(Startup.class, args);
      }
      }
  • EnableJpaAuditing审计注解

    公共实体

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    @Data
    //该注解标注的类不会映射到数据库中单独的表,该类所拥有的属性都将映射到其子类
    @MappedSuperclass
    public abstract class CommonEntity {
    @Id
    @Column(columnDefinition = "varchar(20) comment '主键'")
    private String id;
    @Column(columnDefinition = "int(11) default 0 comment '乐观锁'")
    private int version;
    @Column(columnDefinition = "timestamp default CURRENT_TIMESTAMP comment '创建时间'")
    private LocalDateTime createDate;
    @Column(columnDefinition = "timestamp default CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP comment '最后修改时间'")
    private LocalDateTime lastModifiedDate;
    @Column(columnDefinition = "int(2) default 0 comment '状态:0-有效,1-无效'")
    private int status;
    }
  • 超类,公共实体

  • Column定义字段、Id定义唯一标识
  • columnDefinition定义字段类型、长度、默认值、注释
  • CURRENT_TIMESTAMP定义默认的创建和修改时间

审计字段

1
2
3
4
5
6
@Version
private Long version;
@CreatedDate
private LocalDateTime createDate;
@LastModifiedDate
private LocalDateTime lastModifiedDate;
  • 乐观锁
  • 创建时间
  • 修改时间

###

1
2
3
4
5
6
7
8
9
10
11
12
@Data
@ToString
@Entity(name = "xx")
@Table(appliesTo = "xx",
comment = "xx表")
public class XXEntity extends CommonEntity {
@Column(columnDefinition = "varchar(50) COMMENT 'xx'", unique = true)
private String name;
@Column(columnDefinition = "varchar(20) COMMENT 'xx'")
@Index(name = "idx_projectId")
private String projectId;
}

  • 数据库定义
  • 表定义、注释,Table为org.hibernate.annotations.Table
  • 索引定义
  • 唯一约束
------ 本文结束------

本文标题:SpringBoot+JPA实体自动生成数据库

文章作者:Perkins

发布时间:2019年10月12日

原始链接:https://perkins4j2.github.io/posts/4871/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。