Mybatis migration使用プローブ


継続的な納品プロジェクトでは、データベースの変更の問題であるプロジェクトが反復的にオンラインになります.まだオンラインになっていないプロジェクトでは、データベースを変更するには簡単なsqlを直接変更することができますが、使用が開始されたシステムでは、導入するたびにデータベースをinitすることは少し不可能です.そこでデータベースMigrationが誕生しました.
私のプロジェクトはSpringMVCとMybatisの開発フレームワークです.データベース統合フレームワークとして、Mybatisは使いやすいです.本題に戻り、プロジェクトのためにMybatis Migrationの初探査を始めました.文章に出てくる不適切な点を教えてください.
Mybatis Migrationインストール
インストール手順は主にMybatisの公式サイトを参照してください.http://mybatis.github.io/migrations/index.html、およびMybatisソース認証アドレス:https://github.com/mybatis/migrationsgithub上のREADMEファイルを参照すると、そのインストールプロセスを簡単に完了できます.READMEファイル中のすべてのMybatisパッケージは直接そのGit repoのreleasesの中で見つけることができて、私は3.2.0を選んでダウンロードしてインストールします.インストールが完了するとterminalでmigrate関連のコマンドを直接実行できます.
Mybatus Migration初期化
minggong:migration-test minggong$ migrate init
------------------------------------------------------------------------
-- MyBatis Migrations - init
------------------------------------------------------------------------
Initializing: .
Creating: environments
Creating: scripts
Creating: drivers
Creating: README
Creating: development.properties
Creating: bootstrap.sql
Creating: 20140817132704_create_changelog.sql
Creating: 20140817132705_first_migration.sql
Done!

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 2s
-- Finished at: Sun Aug 17 18:57:05 GMT+05:30 2014
-- Final Memory: 3M/493M
------------------------------------------------------------------------
minggong:migration-test minggong$ ls
README      drivers     environments    scripts

初期化されたディレクトリの下には、Migrationに関連するプロジェクトファイルおよびディレクトリREADME、drivers、environments、scriptsが自動的に生成されます.driversに接続データベースを配置するために必要なjdbc,environmentsには主に接続データベースのアドレスや許可情報などが配置され,scriptsディレクトリの下にはデータベース関連のsqlが配置され,initのときに上記表示のcreate_が生成される.changelog.sqlとfirst_migration.sqlファイル.
問題を例として説明するために、今回のテストではmysqlデータベースを採用し、mysql公式サイトからmysql-connector-java-5.1.32をダウンロードし、environmentのデータベース情報を簡単に構成しました.
## JDBC connection properties.
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/arctic
username=root
password=

ここのarcticは、すでにローカルに存在するmysqlデータベースです.
Migrate bootstrap
minggong:migration-test minggong$ migrate bootstrap
------------------------------------------------------------------------
-- MyBatis Migrations - bootstrap
------------------------------------------------------------------------
========== Applying: bootstrap.sql =============================================

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 19:43:29 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------

実行すると、scriptsファイルに別のbootstrapファイルが生成されます.主にいくつかのデータベースの初期化作業を行うことができます.
Migrate new newコマンドでは、新しいsqlスクリプトを作成できます.データテーブル構造情報を入力するだけで、必要なデータテーブルを簡単に作成できます.
minggong:migration-test minggong$ migrate new "create blog table"
------------------------------------------------------------------------
-- MyBatis Migrations - new
------------------------------------------------------------------------
Creating: 20140817142201_create_blog_table.sql
Done!

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 1s
-- Finished at: Sun Aug 17 19:52:01 GMT+05:30 2014
-- Final Memory: 3M/493M
------------------------------------------------------------------------

scriptsフォルダには、タイムスタンプ付きsqlファイルが作成されます.20140817142201_create_blog_table.sqlです.その内容は次のとおりです.
-- // create blog table
-- Migration SQL that makes the change goes here.

-- //@UNDO
-- SQL to undo the change goes here.

ファイルの内容は主にcreate tableundoを含み、それぞれテーブルの作成と削除コマンドを表しています.
-- // create blog table
-- Migration SQL that makes the change goes here.
CREATE TABLE BLOG (
  ID INT,
  NAME VARCHAR(255),
  PRIMARY KEY(ID)
);
-- //@UNDO
-- SQL to undo the change goes here.
DROP TABLE BLOG;

テーブル構造をsqlに書きましたが、このスクリプトをどのように実行してデータベース内のテーブル構造を変更するか.まず、現在のデータベースのステータスを理解する必要があります.
Migrate status
minggong:migration-test minggong$ migrate status
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
20140817132704    ...pending...    create changelog
20140817132705    ...pending...    first migration
20140817142201    ...pending...    create blog table

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 20:21:06 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------

migrationを実行したことがないため、changelog table自体を含むすべてのmigrationスクリプトはpendingの状態にあります.migrate upコマンドを実行すると、スクリプトのステータスが変更されます.
Migrate up, down
より多くのup、down、および後続のversion操作を表示するために、データテーブルmigrate new 'create table author'を再作成するauthorおよびblogはpending状態にあるはずです.
minggong:migration-test minggong$ migrate status
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
20140817132704    ...pending...    create changelog
20140817132705    ...pending...    first migration
20140817142201    ...pending...    create blog table
20140817154537    ...pending...    create table author

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 21:21:49 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------
minggong:migration-test minggong$ migrate up
------------------------------------------------------------------------
-- MyBatis Migrations - up
------------------------------------------------------------------------
========== Applying: 20140817132704_create_changelog.sql =======================
--  Create Changelog
-- Default DDL for changelog table that will keep
-- a record of the migrations that have been run.
-- You can modify this to suit your database before
-- running your first migration.
-- Be sure that ID and DESCRIPTION fields exist in
-- BigInteger and String compatible fields respectively.
CREATE TABLE CHANGELOG (
ID NUMERIC(20,0) NOT NULL,
APPLIED_AT VARCHAR(25) NOT NULL,
DESCRIPTION VARCHAR(255) NOT NULL
)

ALTER TABLE CHANGELOG
ADD CONSTRAINT PK_CHANGELOG
PRIMARY KEY (id)


========== Applying: 20140817132705_first_migration.sql ========================
--  First migration.
-- Migration SQL that makes the change goes here.

========== Applying: 20140817142201_create_blog_table.sql ======================
--  create blog table
-- Migration SQL that makes the change goes here.

========== Applying: 20140817154537_create_table_author.sql ====================
--  create table author
-- Migration SQL that makes the change goes here.

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 21:22:17 GMT+05:30 2014
-- Final Memory: 13M/493M
------------------------------------------------------------------------
migrate upコマンドはすべてのsqlをupし、pending状態のSQLスクリプトはすべて実行されます.対応するmigrate downはundo sqlスクリプトの実行、すなわちsqlでユーザがカスタマイズしたUNDO部分を実行する.異なる点は、migrate downは1ステップしかロールバックできないため、初期状態にロールバックするには、migrate downの動作を複数回実行する必要がある.もちろんパラメータを直接指定することもできますが、この例では、4ステップmigrate down 4:minggong:migration-test minggong$migrate status—————————————————————————————————MyBatis Migrations-status——————————————————————————————ID Applied At Description============================================================================================= 20140817132704 2014-08-17 21:22:17 create changelog 20140817132705 2014-08-17 21:22:17 first migration 20140817142201 2014-08-17 21:22:17 create blog table 20140817154537 2014-08-17 21:26:01 create table author
------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 21:26:07 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------
minggong:migration-test minggong$ migrate down 4
------------------------------------------------------------------------
-- MyBatis Migrations - down
------------------------------------------------------------------------
========== Undoing: 20140817154537_create_table_author.sql =====================
-- @UNDO
-- SQL to undo the change goes here.

========== Undoing: 20140817142201_create_blog_table.sql =======================
-- @UNDO
-- SQL to undo the change goes here.

========== Undoing: 20140817132705_first_migration.sql =========================
-- @UNDO
-- SQL to undo the change goes here.

========== Undoing: 20140817132704_create_changelog.sql ========================
-- @UNDO
DROP TABLE CHANGELOG

Changelog doesn't exist. No further migrations will be undone (normal for the last migration).

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 21:29:53 GMT+05:30 2014
-- Final Memory: 14M/493M
------------------------------------------------------------------------
minggong:migration-test minggong$ migrate status
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
20140817132704    ...pending...    create changelog
20140817132705    ...pending...    first migration
20140817142201    ...pending...    create blog table
20140817154537    ...pending...    create table author

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 21:30:09 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------

Migrate verison
指定したversion状態にロールバックし、versionのID:migrate verison 20140817132705を追加する必要があります.
minggong:migration-test minggong$ migrate status
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
20140817132704 2014-08-17 22:23:05 create changelog
20140817132705 2014-08-17 22:23:25 first migration
20140817142201 2014-08-17 22:23:25 create blog table
20140817154537 2014-08-17 22:23:25 create table author
20140817164341 2014-08-17 22:23:25 create table book

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 22:23:36 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------
minggong:migration-test minggong$ migrate version 20140817142201
------------------------------------------------------------------------
-- MyBatis Migrations - version
------------------------------------------------------------------------
Downgrading to: 20140817142201
========== Undoing: 20140817164341_create_table_book.sql =======================
-- @UNDO
-- SQL to undo the change goes here.

========== Undoing: 20140817154537_create_table_author.sql =====================
-- @UNDO
-- SQL to undo the change goes here.


------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 22:23:43 GMT+05:30 2014
-- Final Memory: 13M/493M
------------------------------------------------------------------------
minggong:migration-test minggong$ migrate status
------------------------------------------------------------------------
-- MyBatis Migrations - status
------------------------------------------------------------------------
ID             Applied At          Description
================================================================================
20140817132704 2014-08-17 22:23:05 create changelog
20140817132705 2014-08-17 22:23:25 first migration
20140817142201 2014-08-17 22:23:25 create blog table
20140817154537    ...pending...    create table author
20140817164341    ...pending...    create table book

------------------------------------------------------------------------
-- MyBatis Migrations SUCCESS
-- Total time: 0s
-- Finished at: Sun Aug 17 22:23:47 GMT+05:30 2014
-- Final Memory: 11M/493M
------------------------------------------------------------------------

Migrate pending migrate upコマンドはアップグレードのみ可能ですが、複数のコラボレーションでmigration sqlスクリプトが先に作成されてからコミットされると、1台のサーバに同期すると、中間のファイルがpendingの状態にある可能性があります.この場合、migrate upを使用して実行することはできません.
この場合、このsqlが基本的に他のsqlに依存していない場合、migrate upを直接使用してpending状態にあるスクリプトを実行することができる.これはお勧めしないやり方だと公式に説明しています.もう1つの方法は、migrate version [ID]を使用してpendingバージョンの前の状態に戻り、migrate upを再び実行して、実行操作全体を完了することであり、この方法は推奨されるより安全である.
Migrate script
使用方法はmigrate script <V1> <V2> > file.sqlmigrate 20140817142201 20140817164341 > do.sqlこのdoスクリプトの実行は、上述した2つの状態の実行authorおよびbookを適用する.migrate 20140817164341 20140817142201 > undo.sql undoスクリプト実行は、V 1とV 2の間の上記の状態をロールバックすることができる.
最初と最後の間でロールバックする場合は、元のバージョンIDの代わりに0を使用できます.migrate 0 20140817164341 > do.sql migrate 20140817164341 0 > undo.sql
ただし、上記のscriptスクリプトについてはmigrate doを直接使用する.sql実行はずっと間違っています!公式には単一のスクリプトの実行についても説明されていません.あとははっきりしてから補充します.