3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 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のカラムが追加されている

3
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?