Spring Boot在H2資料庫產生初始資料的方式如下。
Spring Boot預設會讀取classpath
根目錄下的data.sql
或schema.sql
,可在src/main/resources
建立script檔來初始資料。
例如本範例以Spring Data JPA設定兩個entity類別Department
及Employee
。
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}.sql
或schema-${platform}.sql
,${platform}
為資料庫名稱,例如data-oracle.sql
對Oracle資料庫初始資料,data-mysql.sql
則對MySQL初始資料。
Spring Boot預設只對embedded資料庫初始資料,如果要對一般資料庫,則application.properties
要設定spring.datasource.initialization-mode=always
。
沒有留言:
張貼留言