【Liquibase】数据库创建和表定义更改

创建新的起始项目

选择Liquibase和MySQL

WS000000.JPG

将DB的信息放入application.properties文件中。

在MySQL中创建一个名为”testdatabase”的数据库。

spring.datasource.url=jdbc:mysql://localhost:3306/testDataBase?serverTimezone=UTC&createDatabaseIfNotExist=true
spring.datasource.username=root
spring.datasource.password=system
spring.jpa.database=MYSQL
spring.liquibase.change-log=classpath:db/db.changelog-master.yaml

添加构建的依赖关系

在build.gradle的dependencies中添加Spring Data JPA

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation 'org.liquibase:liquibase-core'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}

创建一个最先读取的 YAML 文件。

将db.changelog-master.yaml文件放在Sample\src\main\resources\db文件夹中(文件名写在application.properties中)。在文件中写入db.changelog目录下的文件名。

databaseChangeLog:
- include:
    file: db/changelog/a.yaml

这样就会在db.changelog目录下自动生成yaml文件

表格定义

我們將在剛剛自动生成的YAML文件中記錄表格定義。

databaseChangeLog:
  - changeSet:
      id: 1
      author: aaa
      changes:
        - createTable:
            tableName: user
            columns:
              - column:
                  name: id
                  type: int
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    nullable: false
              - column:
                  name: firstname
                  type: varchar(50)
              - column:
                  name: lastname
                  type: varchar(50)
                  constraints:
                    nullable: false
              - column:
                  name: state
                  type: char(2)

※在yaml文件中,缩进必须使用半角空格

执行

WS000001.JPG
WS000002.JPG

如果表格定义发生变化

◆添加列

在db.changelog-master.yaml中添加文件名

databaseChangeLog:
- include:
    file: db/changelog/a.yaml
- include:
    file: db/changelog/b.yaml

在自动生成的db.changelog文件夹下的yaml文件中编写ALTER语句。

databaseChangeLog:
  - changeSet:
      id: 2
      comment: tuika
      author: takahashi
      changes: 
        - addColumn:
            catalogName: testdatabase
            columns:
              - column:
                  name: age
                  remarks: memo
                  type: bigint
            schemaName: public
            tableName: user

※databaseChangeLog的id是唯一键,所以不会重复。

执行后确认A5M2

WS000004.JPG
WS000005.JPG
bannerAds