MyBatis Migrations

MyBatis Migrationsの設定

Releases · mybatis/migrations · GitHubからダウンロードします。
ダウンロード後、適当なディレクトリに配置してパスを通します。
パスは、bash_profileに下記の例の様に通します。

export MYBATIS_MIGRATIONS_HOME=${HOME}/project/tools/mybatis-migrations
export PATH=${PATH}:${MYBATIS_MIGRATIONS_HOME}/bin

プロジェクトの初期化

プロジェクト用ディレクトリを作成して、下記の例の様にプロジェクトの初期化を行います。

[user@localhost]$ mkdir sample
[user@localhost]$ cd sample
[user@localhost]$ mkdir migration
[user@localhost]$ cd migration
[user@localhost]$ migrate init
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
------------------------------------------------------------------------
-- MyBatis Migrations - init
------------------------------------------------------------------------
Initializing: .
Creating: environments
Creating: scripts
Creating: drivers
Creating: README
Creating: development.properties
Creating: bootstrap.sql
Creating: 20150413014605_create_changelog.sql
Creating: 20150413014606_first_migration.sql
Done!
------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 2s
-- Finished at: Mon Apr 13 10:46:06 JST 2015
-- Final Memory: 10M/479M
------------------------------------------------------------------------

作成したプロジェクトのディレクトリ構成は、下記の内容になっています。

<project>
  |-migration
       |-drivers ← JDBCドライバー配置場所
       |-environments ← DB接続設定ファイル配置場所
       |-scripts ← SQLファイル配置場所

マイグレーションを行うDBのJDBCドライバーをmigration/driversへ配置します。

DB接続設定

migration/environments/development.propertiesにDBへの接続情報を定義します。

time_zone=GMT+0:00
driver=<JDBCドライバークラス名(Oracleの場合、oracle.jdbc.driver.OracleDriver)>
url=<JDBC接続URL(Oracleの場合、jdbc:oracle:thin:@localhost:1521:xe>)
username=<ユーザー名>
password=<パスワード>
send_full_script=false
delimiter=;
full_line_delimiter=false
auto_commit=false
changelog=CHANGELOG

このファイルは、環境ごとに用意する必要があります。
その為、例えば開発、ステージ、本番を用意する場合は、下記の3つファイルを用意します。

  • development.properties(開発)
  • staging.properties(ステージ)
  • production.properties(本番)

Scriptsファイル作成

下記のコマンドでSQLファイルを生成します。

[user@localhost]$ migrate new create_hello_table
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
------------------------------------------------------------------------
-- MyBatis Migrations - new
------------------------------------------------------------------------
Creating: 20150413050113_create_hello_table.sql
Done!
------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 1s
-- Finished at: Mon Apr 13 14:01:13 JST 2015
-- Final Memory: 7M/479M
------------------------------------------------------------------------

migration/scriptsにテンプレートファイルが作成されるので、そのファイルにDBへの更新用SQLと更新を戻す用SQLを定義します。

-- // create_hello_table
-- Migration SQL that makes the change goes here.
CREATE TABLE HELLO_TABLE
(
    MESSAGE varchar2(50) NOT NULL
);
-- //@UNDO
-- SQL to undo the change goes here.
DROP TABLE HELLO_TABLE CASCADE CONSTRAINTS;

操作方法

[user@localhost]$ migrate up ← DBを更新する場合
[user@localhost]$ migrate down ← DBを戻す場合

Bootstrapに関して

途中からこのツールを導入する場合、既に作成済みのテーブルのSQLをmigration/scripts/bootstrap.sqlに全て定義します。
途中で、開発メンバーが入ったり、DBを作り直したりする場合は、下記のコマンドを実行後、今まで当てたパッチをDBへ反映します。

[user@localhost]$ migrate bootstrap --force
[user@localhost]$ migrate up