当前位置: 首页 > article >正文

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

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


http://www.kler.cn/a/15050.html

相关文章:

  • 《编程与艺术的交汇:Python Turtle 绘画与游戏制作》
  • 深度学习之目标检测的技巧汇总
  • 数据结构(一)链表
  • 下一代以区域为导向的电子/电气架构
  • 【面试】前端vue项目架构详细描述
  • Java策略模式应用实战
  • [Java List类型和Map类型想换转换案例]
  • 2023年产业基金研究报告
  • 【回眸】ChatGPT Plus(GPT4体验卡)
  • L1-6 剪切粘贴
  • 写一个加载远程js的函数,function loadJSFn(sucCb,failCb){}, 要考虑到低端浏览器的兼容性;
  • 如何基于vue实现倒计时效果
  • 字节的面试,你能扛住几道?
  • NetSuite 负库存控制功能包
  • Go分布式爬虫笔记(二十)
  • promise的作用
  • huggingface下载的.arrow数据集读取与使用说明
  • 初学者入门C语言指针与链表
  • CVE漏洞复现-CVE-2019-11043-PHP-FPM 远程代码执行漏洞
  • 地热井监测控制系统解决方案
  • 适用于Windows PC和Mac的最佳录屏软件Camtasia2023强悍来袭
  • C++设计模式21:策略模式
  • 如何高质量的提问题让chatgpt更明白我们的意图
  • delphi JSON用法
  • static_cast、dynamic_cast和reinterpret_cast区别和联系
  • 最好用的六款虚拟机软件,赶紧收藏