AdSense

網頁

2020/8/26

Spring Boot H2 Database 初始資料

Spring Boot在H2資料庫產生初始資料的方式如下。

Spring Boot預設會讀取classpath根目錄下的data.sqlschema.sql,可在src/main/resources建立script檔來初始資料。

例如本範例以Spring Data JPA設定兩個entity類別DepartmentEmployee

Department

@Entity
public class Department implements Serializable {
    private static final Long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

}

Employee

@Entity
public class Employee implements Serializable {
    private static final Long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private Long departmentId;

    private String name;

    private Integer age;

}

src/main/resources建立data.sql並撰寫新增sql,Spring Boot啟動時會執行此script並新增初始資料至H2資料庫。

data.sql

INSERT INTO department (ID, NAME) VALUES (1, 'Marketing');
INSERT INTO department (id, NAME) VALUES (2, 'HR');

INSERT INTO employee (ID, DEPARTMENT_ID, NAME, AGE) VALUES (1, 1, 'John', 22);
INSERT INTO employee (ID, DEPARTMENT_ID, NAME, AGE) VALUES (2, 1, 'Mary', 25);
INSERT INTO employee (ID, DEPARTMENT_ID, NAME, AGE) VALUES (3, 2, 'Andy', 33);

專案目錄結構。



參考github


data.sql中必須有資料,否則啟動時會出現錯誤
java.lang.IllegalArgumentException: 'script' must not be null or empty


除了H2也可以用在其他資料庫上,例如Oracle,MySQL等。而針對特定資料庫的script檔可以命名為data-${platform}.sqlschema-${platform}.sql${platform}為資料庫名稱,例如data-oracle.sql對Oracle資料庫初始資料,data-mysql.sql則對MySQL初始資料。

Spring Boot預設只對embedded資料庫初始資料,如果要對一般資料庫,則application.properties要設定spring.datasource.initialization-mode=always


沒有留言:

AdSense