如何在SpringBoot2啟動(dòng)時(shí)自動(dòng)創(chuàng)建表、插入數(shù)據(jù)
一、springboot2中如何根據(jù)實(shí)體類自動(dòng)生成表
只需在類上添加@Entity注解。spring boot啟動(dòng)時(shí)會(huì)自動(dòng)生成user表(當(dāng)然,數(shù)據(jù)庫還得自己先創(chuàng)建)
import lombok.Data;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.io.Serializable;
/**
* @author chushiyan
* @email Y2h1c2hpeWFuMDQxNUAxNjMuY29t(base64)
* @description
*/
@Data
@Entity
public class User implements Serializable {
@Id
private String id;
private String name;
}
對(duì)應(yīng)的application.yml:
server:
port: 10000
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
username: root
password: root
jpa:
database: MySQL
show-sql: true
generate-ddl: true
二、springboot2啟動(dòng)時(shí)如何向數(shù)據(jù)庫自動(dòng)插入數(shù)據(jù)
1、首先,在resources目錄下創(chuàng)建data.sql文件,例如:
INSERT INTO user (id,name) VALUES ('0','chushiyan');
INSERT INTO user (id,name) VALUES ('1','zhangsan');
INSERT INTO user (id,name) VALUES ('2','lisi');
INSERT INTO user (id,name) VALUES ('3','wangwu');
springboot啟動(dòng)時(shí),會(huì)從classpath下讀取該文件,用來向數(shù)據(jù)庫的表插入數(shù)據(jù)。
2、然后,配置
spring.jpa.hibernate.ddl-auto=create-drop # 或者create
spring.datasource.initialization-mode=always
注:spring.jpa.hibernate.ddl-auto=create 或者 create-drop會(huì)先刪除已存在的表,主要用于測試。
完整application.yml:
server:
port: 10000
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
username: root
password: root
initialization-mode: always
jpa:
database: MySQL
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: create-drop
三、如何讓SpringBoot2根據(jù)我們自定義的建表語句創(chuàng)建數(shù)據(jù)庫表
1、首先,在resources目錄下創(chuàng)建schema.sql文件,例如:
CREATE TABLE user (
id VARCHAR(128) NOT NULL ,
name VARCHAR(32) NOT NULL,
PRIMARY KEY (id)
);
springboot啟動(dòng)時(shí),會(huì)從classpath下讀取該文件,用來創(chuàng)建數(shù)據(jù)庫表。
2、然后,配置:
spring.jpa.hibernate.ddl-auto=none
完整application.yml:
server:
port: 10000
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf-8
username: root
password: root
initialization-mode: always
jpa:
database: MySQL
show-sql: true
generate-ddl: true
hibernate:
ddl-auto: none
驗(yàn)證是否使用了schema.sql文件創(chuàng)建表,查詢數(shù)據(jù)庫:
mysql> show create table user;
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| user | CREATE TABLE `user` (
`id` varchar(128) NOT NULL,
`name` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+-----------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
mysql>