LoginSignup
2
2

More than 3 years have passed since last update.

【Liquibase】DB作成・テーブル定義変更

Last updated at Posted at 2019-08-10

新規スタータープロジェクト作成

LiquibaseとMySQLを選択

WS000000.JPG

application.propertiesにDBの情報を入れる

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ファイルを作成する

Sample\src\main\resources\db配下にdb.changelog-master.yamlを置く
(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ファイルは必ず半角スペースでインデントする

実行

a5m2でtestdatabaseというDBとuserテーブルが生成されていることを確認
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
databaseChangeLogにb.yamlのデータがinsertされている

WS000005.JPG
ageのカラムが追加されている

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2