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; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM