1. 程式人生 > >Springboot 之 Hibernate自動建表(Mysql)

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的資料表,且存在相應的表字段。

本文章來自【知識林】