Spring Data Jpa 根据实体类反向生成数据库表

Spring Data Jpa 根据实体类反向生成数据库表

1.引入Maven

 <!-- Spring Data Jpa -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.6</version>
</dependency>

 

2.配置文件application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=UTC
    username: root
    password: root
    druid:
      max-active: 20 #最大活跃数
      initial-size: 5 #初始化数量
      min-idle: 5 #最小活跃数
      max-wait: 60000 #配置超时等待时间
      time-between-eviction-runs-millis: 60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
      min-evictable-idle-time-millis: 300000 #配置一个连接在池中最小生存的时间,单位是毫秒
      validation-query: SELECT 1 FROM
      test-while-idle: true
      test-on-borrow: false
      test-on-return: false
      pool-prepared-statements: true #打开PSCache,并且指定每个连接上PSCache的大小
      max-pool-prepared-statement-per-connection-size: 20
      filters: stat,wall,log4j2 #配置监控统计拦截的filters,去掉后监控界面sql无法统计,‘wall‘用于防火墙
      connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500 #通过connectProperties属性来打开mergeSql功能;慢SQL记录
      use-global-data-source-stat: true
  jpa:
    show-sql: true  #控制台显示SQL
    database: mysql
    hibernate:
      ddl-auto: update  #更新或者创建数据表结构
    open-in-view: false

 

3.实体类

①@Entity:告诉JPA这是一个实体类(和数据表映射的类)

②@Table:指定和哪个数据表对应;如果省略默认表名就是user;

③@Id:告诉JPA这个字段是数据表的主键

④@GeneratedValue:告诉JPA这个字段的生成规则;

  GenerationType.AUTO--主键由程序控制

  GenerationType.TABLE--使用一个特定的数据库表格来保存主键

  GenerationType.SEQUENCE--根据底层数据库的序列来生成主键,条件是数据库支持序列

  GenerationType.IDENTITY--自增

⑤@Column:设置字段属性

  name:设置该字段在数据库表中的名称

  unique:唯一标识,默认false

  nullable:是否可以为空为空,默认true

  insertable:插入数据时,是否需要插入该字段

  updatable:更新数据时,是否需要更新该字段

  columnDefinition:该字段创建的SQL语句,一般用于通过Entity生成表定义时使用;常用于说明数据库字段的注释

  table:表示当映射多个表时,指定表的表中的字段,默认值为主表的表名

  length:字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符

  precision和scale:表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数

@Data
@Entity @Table(name
= "sys_account_info") public class AccountInfo implements Serializable { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id;
  @Column(name = "login_account")
private String loginAccount; private String password; private Integer accountStatus;
}

注意:在多模块开发中,如果将实体类单独抽出来作为一个模块时,需要在启动类中引入@EntityScan注解扫描实体类所在的包

@SpringBootApplication
@EntityScan(basePackages = {"com.test.entity"})
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SystemApplication.class, args);
    }

}

⑥父类

在实际开发中,我们通常会把一些数据库*有的字段抽出来作为一个父类BaseEntity,那些表里面有这些字段直接继承即可。

但在Jpa中,这个公共父类需要添加@MappedSuperClass这个注解,否则父类中的字段是无法反向生成到数据表中的。

@Data
@MappedSuperclass
public class BaseEntity { /** * 主键 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * 创建人 */ private Long createUserId; /** * 创建时间 */ private LocalDateTime gmtCreate; /** * 更新人 */ private Long updateUserId; /** * 更新时间 */ private LocalDateTime gmtModified; /** * 是否删除 */ private Boolean isDelete; /** * 版本 */ private Integer version; }

 

Spring Data Jpa 根据实体类反向生成数据库表

上一篇:MySQL delete from where in 更新子句


下一篇:配置Spring报错:class path resource [applicationContext.xml] cannot be opened because it does not exist