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

###新規スタータープロジェクト作成
LiquibaseとMySQLを選択

![WS000000.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439247/2f0b2a7b-3a9d-20fc-ca87-721da9928d61.jpeg)




###application.propertiesにDBの情報を入れる
MySQLで"testdatabase"というデータベースを作る

```java
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を追加

```java
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配下に置くファイル名を記載

```java
databaseChangeLog:
- include:
    file: db/changelog/a.yaml
```
これでdb.changelog配下にyamlファイルが自動生成される

###テーブル定義
先ほど自動生成されたyamlファイルにテーブル定義を記載していく

```java
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439247/2dd2d662-2ede-c114-483e-831668933385.jpeg)

![WS000002.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439247/46199dc4-55a0-fcef-b6d0-62dc38aec759.jpeg)


###テーブル定義が変更になった場合

#####◆カラムの追加
db.changelog-master.yamlにファイル名を追加

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

自動生成されたdb.changelog配下のyamlファイルにALTER文を書く

```java
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](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439247/8f31e7b0-6e80-cd73-cbe4-d515d7a63f69.jpeg)
databaseChangeLogにb.yamlのデータがinsertされている

![WS000005.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/439247/2e37810f-b751-4f3d-a83e-c190ce5dc5a4.jpeg)
ageのカラムが追加されている