前言
有些场景,需要我们在项目启动的时候,初始化数据库表。JPA 虽然能达到很好的功能,但是我们用的是 Mybatis Plus,因此使用 Spring 官方提供的启动项目时初始化 sql 的功能。
引入依赖
当前项目应为一个 Spring Boot 项目,引入 mysql 驱动依赖到 pom.xml 中
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
配置文件
在 springboot 的 application.properties 配置文件中,增加数据库连接配置与初始化数据库的操作
#============================================================================
# 数据库链接配置
#============================================================================
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot-admin?serverTimezone=Asia/Shanghai&characterEncoding=utf8&sslMode=DISABLED
spring.datasource.username=root
spring.datasource.password=springboot-admin-13921
spring.datasource.hikari.max-lifetime=600000
spring.datasource.hikari.maximum-pool-size=10
# 执行初始化脚本的用户名称
spring.sql.init.username=root
# 非嵌入式数据库,always 才会执行初始化 sql
spring.sql.init.mode=always
# 执行初始化脚本的用户密码
spring.sql.init.password=springboot-admin-13921
# 初始化的schema脚本位置
spring.sql.init.schema-locations=classpath*:sql/schema.sql
定义 sql 文件
根据上述的配置,可以看到 classpath*:sql/schema.sql
,下面就在 springboot 项目中的资源文件 resources
下,新建 sql
文件夹,然后新建 schema.sql
文件
CREATE TABLE IF NOT EXISTS `admin_user`
(
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '自增 ID',
`username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户名',
`user_phone` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '手机号',
`password` varchar(255) COLLATE utf8mb4_general_ci NOT NULL COMMENT '密码',
`avatar` varchar(255) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '头像',
`is_delete` int NOT NULL DEFAULT '0' COMMENT '逻辑删除 0-未删除 1-已删除',
PRIMARY KEY (`user_id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_general_ci;
INSERT INTO `admin_user` (username, user_phone, `password`, avatar)
values ('root', '', '$2a$10$a.6pvIt48KwZ.Zu/Sz.wruTK10WhIx8WK1iglIE1ARVHuJYcBlfYm', ''),
('user', '', '$2a$10$a.6pvIt48KwZ.Zu/Sz.wruTK10WhIx8WK1iglIE1ARVHuJYcBlfYm', '');
启动项目
项目 ...Application
启动类,启动后,会发现数据库中已经新生成的表,并且插入的数据存在。