爲何要這麼使用呢?
1、可以防止項目在開發時誤刪程序運行必備數據,
2、特方便,簡潔(只需要把寫好的數據庫腳本寫成文件放入工程目錄下,在你的yml,或properties文件裏寫上一點配置就好)!
在開發中有這兩點理由我覺得完全足夠了。
開始使用
後臺配置:
spring:
datasource:
# 這句話的意思是(初始化模式(springboot2.0),其中有三個值,always爲始終執行初始化,
# embedded只初始化內存數據庫(默認值),如h2等,never爲不執行初始化。)
initialization-mode: always
# 這是支撐程序運行必須要有的表的sql腳本
schema: classpath:sql/dcp.sql
# 這個文件就是表數據文件了
data: classpath:sql/data.sql
# sql腳本分割符,默認是‘;’,必須設置成其他字符才能創建存儲過程,這個後面能用到,結束存儲過程的標誌
separator: $$
啓動所需配置文件就全部在這裏了,怎麼樣 簡單吧。
但是我們在運行他的表數據時怎麼知道他會不會按照我們的預期運行呢.,下面就是要用到我們的遊標和存儲過程了
/*有則刪除*/
DROP PROCEDURE IF EXISTS p_init_user; $$
/*創建存儲過程*/
CREATE PROCEDURE p_init_user()
/*開始內容*/
BEGIN
/*創建一個遊標參數爲整形 ,這裏就是使用遊標的靈活之處了,他的後面可以是一個查詢集合!*/
DECLARE row_num INT;
/*統計表的總條數,賦值給遊標,用來執行插入條件*/
SELECT COUNT(*) INTO row_num FROM t_user;
/*如果他的查詢數量等於零那麼他將會執行下面的插入語句*/
IF row_num = 0 THEN
INSERT INTO t_user(id,userName,password,personName,enabled) VALUES ('00001', 'admin','123456','admin',1);
/*結束這個判斷*/
END IF;
/*邏輯和上面一樣的*/
SELECT COUNT(*) INTO row_num FROM t_role;
IF row_num = 0 THEN
INSERT INTO t_role(id,name,level,status) VALUES ('00001', '超級管理員',1,1);
INSERT INTO t_role(id,name,level,status) VALUES ('00002', '管理員',2,1);
INSERT INTO t_role(id,name,level,status) VALUES ('00003', '操作員',3,1);
END IF;
/*邏輯和上面一樣的*/
SELECT COUNT(*) INTO row_num FROM t_user_role;
IF row_num = 0 THEN
INSERT INTO t_user_role(id,userId,roleId) VALUES ('00001', '00001','00001');
END IF;
/*結束這個存儲過程,*/
/* # sql腳本分割符,默認是‘;’,必須設置成其他字符才能創建存儲過程*/
END; $$