Springboot 之 Hibernate自動建表(Mysql)
本文章來自【知識林】
- 引入Maven依賴包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId >
</dependency>
spring-boot-starter-data-jpa
中已經包含了Hibernate所需要的相關依賴,所以只需要引入Jpa的依賴即可。
- 建立配置檔案
在application.properties
中加一行:spring.profiles.active=dev
application-dev.properties
配置檔案的內容如下:
server.port=80
# Hibernate 相關配置
## 方言
#hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
## 顯示Sql
hibernate.show_sql=true
## 自動建表方式
#hibernate.hbm2ddl.auto= update
## 自動掃描的包字首
entitymanager.packagesToScan= com.zslin
## 資料庫連線
spring.datasource.url=jdbc:mysql://localhost:3306/study05?\
useUnicode=true&characterEncoding=utf-8&useSSL=true&autoReconnect=true
## 使用者名稱
spring.datasource.username =root
## 密碼
spring.datasource.password=123
## 資料庫驅動
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
## 建表方式
spring.jpa.properties.hibernate.hbm2ddl.auto=update
# 方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
注意:最關鍵的是最後兩個配置,spring.jpa.properties.hibernate.hbm2ddl.auto=update
而不是hibernate.hbm2ddl.auto=update
,使用了Jpa所以鍵名稱需要有相應調整,否則不會自動建表
spring.jpa.properties.hibernate.hbm2ddl.auto
有幾種配置:
create
:每次載入Hibernate時都會刪除上一次生成的表,然後重新生成新表,即使兩次沒有任何修改也會這樣執行,這就導致每次啟動都是一個新的資料庫,也是導致資料丟失的重要原因。create-drop
:每次載入Hibernate時都會生成表,但當SessionFactory關閉時,所生成的表將自動刪除。update
:最常用的屬性值,第一次載入Hibernate時建立資料表(前提是需要先有資料庫),以後載入HIbernate時只會根據model更新,即使model已經刪除了某些屬性,資料表也不會隨之刪除欄位。validate
:每次載入Hibernate時都會驗證資料表結構,只會和已經存在的資料表進行比較,根據model修改表結構,但不會建立新表。
- 建立Model實體類
package com.zslin.model;
import javax.persistence.*;
/**
* Created by 鍾述林 [email protected] on 2016/10/18 17:15.
*/
@Entity
@Table(name = "t_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "user_name")
private String userName;
private String password;
@Column(name = "nick_name")
private String nickName;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
注意:
1、 在主建Id上需要加註釋:@Id
和@GeneratedValue(strategy = GenerationType.AUTO)
才會自動增長
2、 在需要重新設定表字段名的屬性上加註釋@Column(name = "欄位名")
即可。
3、 在類名上添加註釋:@Entity
和@Table(name = "t_user")
,t_user
是表名
- 啟動專案
啟動專案後在study05
資料庫中將出現t_user的資料表,且存在相應的表字段。
本文章來自【知識林】