SpringBoot启动时自动创建数据库表
Spring Boot 启动时自动创建 MySQL 数据库表
要想在 SpringBoot 程序启动时自动创建数据库表,我们首先需要导入相关依赖,这里我们导入了spring-jdbc
(提供了与关系型数据库进行交互的一系列工具和类)与 HikariCP
(高性能的JDBC连接池),如下:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.0.8</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
然后需要编写一份 sql 建表语句,并将其放在 resource/sql/
目录下:
CREATE TABLE `users` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(50) NOT NULL,
`email` varchar(50) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
然后我们在 Spring Boot 的 application.yml
配置文件中进行声明启动时自动创建数据库表,如下:
spring:
sql:
init:
separator: ;
encoding: UTF-8
platform: mysql
mode: always
continue-on-error: false
schema-locations:
- classpath:sql/schema.sql
data-locations:
- classpath:sql/data.sql
具体含义为:
separator
:指定SQL语句的断句分隔符,默认为分号;
。如果您的SQL语句中包含存储过程或游标等语句,则需要将该属性更改为适当的分隔符。例如,如果您的SQL语句使用$$
作为分隔符,则可以将该属性更改为:$$
。encoding
:指定SQL文件的编码方式,默认为UTF-8。platform
:指定SQL方言,默认为所有方言通用。mode
:指定初始化模式,默认值为 embedded,即只在内存数据库中执行初始化。如果您希望在应用程序启动时始终执行初始化,可以将该属性更改为 always。如果您希望不执行初始化,则可以将该属性更改为 never。需要注意的是,如果数据库已经存在相应的表,always 模式下也会重新执行SQL初始化脚本。因此,请谨慎使用此模式。continue-on-error
:指定在初始化数据库时是否遇到错误后继续执行初始化操作。默认情况下,该属性值为 false,即遇到错误时会停止初始化操作。需要注意的是,如果遇到错误后继续执行,可能会导致数据库结构不完整或数据不一致,因此请谨慎使用此属性。schema-locations
:DDL 表初始化语句,用于在应用程序启动时创建数据库表结构,默认加载schema.sql
。data-locations
:DML 数据插入语句,它用于在应用程序启动时向数据库表中插入一些初始化数据,默认加载data.sql
。
需要注意的是,如果 schema-locations 属性和 data-locations 属性中指定的SQL文件路径不存在,或者SQL文件中的语法错误,应用程序启动时会抛出异常。
运行程序,数据库表将会自动创建,本次分享结束~