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。
沒有留言:
張貼留言