關注微信公眾號:CodingTechWork,一起學習進步。
本文主要介紹Spring Boot中使用JPA或JDBC進行數據庫表結構創建的兩種方式。
介紹
在利用SpringBoot框架進行開發時,大部分服務避不開用數據庫進行數據存儲和使用。SpringBoot里面一般有兩種方式進行數據表的創建和數據存儲。
一種是使用Spring Boot JPA,我們需要在application.yml
或者application.properties
中配置jpa相關屬性spring.jpa.xxx
屬性配置。另一種是Spring JDBC,我們需要在application.yml
或者application.properties
中配置JDBC相關屬性,主要是spring.datasource.xxx
屬性配置。當然,使用jpa也需要用到spring.datasource.url/username/password
等屬性配置進行數據庫地址、用戶名、密碼等配置。
配置
配置模板
spring:
datasource:
schema: classpath:db/schema.sql
data: classpath:db/data.sql
sql-script-encoding: UTF-8
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/infinite?useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false
username: userA
password: 123456
jpa:
hibernate:
ddl-auto: none
database: mysql
properties:
hibernate:
dialect: org.hibernate.dialect.MySQL5Dialect
配置說明
spring.datasource.xxx
spring.datasource.schema
: 腳本中創建表的語句存放路徑,classpath/db表示在工程的resource層級下的db目錄中存放。spring.datasource.data
:腳本中初始化數據的語句存放路徑。spring.datasource.sql-script-encoding
:設置腳本的編碼,默認常用設置為UTF-8。spring.datasource.driver-class-name
:配置driver的類名,默認是從JDBC URL中自動探測。spring.datasource.url
:配置數據庫JDBC連接串。spring.datasource.username
:配置數據庫連接用戶名。spring.datasource.password
:配置數據庫連接用戶名對應的密碼。
使用上述方式建表時,spring.jpa.hibernet.ddl-auto
設置成none,否則有啥問題,我也沒嘗試過。這樣配置可以避免兩種方式一起使用。
spring.jpa.xxx
spring.jpa.hibernet.ddl-auto
值說明
- create: 服務程序重啟后,加載hibernate時都會刪除上一次服務生成的表,然后根據服務程序中的model(entity)類再重新生成表,這個值慎用,會導致數據庫中原表數據丟失。
- create-drop :服務服務程序重啟后,加載hibernate時根據model(entity)類生成表,當sessionFactory關閉時,創建的表就自動刪除。
- update:默認常用屬性,第一次加載hibernate時根據model(entity)類會自動建立表結構,后面服務程序重啟時,加載hibernate會根據model(entity)類自動更新表結構,如果表結構改變了,但是表行仍然存在,不會刪除以前的行(對於表結構行只增不減)。
- validate :服務程序重啟后,每次加載hibernate時,驗證創建數據庫表結構,只會和數據庫中的表進行比較,如果不同,就會報錯。不會創建新表,但是會插入新值。
- none : 什么也不做。
我們常用的是update
這個屬性配置。
-
spring.jpa.database
配置數據庫類型,我們常用MYSQL數據庫,就配置MYSQL(大小寫都可)即可; -
spring.jpa.properties.hibernate.dialect
使用MYSQL5作為數據庫訪問方言。
附:什么是數據庫方言
其實類比我們生活中的方言,方言就是某個地方的特色語言,這個語言區別於其他地方的語言,比如在江蘇,有南通方言、鹽城方言、蘇州方言,只要你是當地人,你基本能聽懂當地的方言。
對於數據庫的方言,也是同樣的道理,MySQL是一種方言,Oracle也是一種方言,當然他們都遵循SQL規范的,就好比南通方言、鹽城方言都遵循普通話規范,然后有各自的一個擴展性和特色。舉個例子,MySQL分頁是用limit
關鍵字,而Oracle分頁是用rownum
關鍵字。