您现在的位置是:首页 >技术交流 >SpringBoot启动时自动创建数据库表网站首页技术交流

SpringBoot启动时自动创建数据库表

ThinkStu 2023-06-22 00:00:03
简介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/目录下:
SpringBoot启动时自动创建数据库表

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文件中的语法错误,应用程序启动时会抛出异常。

运行程序,数据库表将会自动创建,本次分享结束~

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。