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初期化
初期化されたディレクトリの下には、Migrationに関連するプロジェクトファイルおよびディレクトリREADME、drivers、environments、scriptsが自動的に生成されます.driversに接続データベースを配置するために必要なjdbc,environmentsには主に接続データベースのアドレスや許可情報などが配置され,scriptsディレクトリの下にはデータベース関連のsqlが配置され,initのときに上記表示のcreate_が生成される.changelog.sqlとfirst_migration.sqlファイル.
問題を例として説明するために、今回のテストではmysqlデータベースを採用し、mysql公式サイトから
ここのarcticは、すでにローカルに存在するmysqlデータベースです.
Migrate bootstrap
実行すると、scriptsファイルに別のbootstrapファイルが生成されます.主にいくつかのデータベースの初期化作業を行うことができます.
Migrate new
scriptsフォルダには、タイムスタンプ付きsqlファイルが作成されます.
ファイルの内容は主に
テーブル構造をsqlに書きましたが、このスクリプトをどのように実行してデータベース内のテーブル構造を変更するか.まず、現在のデータベースのステータスを理解する必要があります.
Migrate status
migrationを実行したことがないため、changelog table自体を含むすべてのmigrationスクリプトは
Migrate up, down
より多くのup、down、および後続のversion操作を表示するために、データテーブル
Migrate verison
指定したversion状態にロールバックし、versionのID:
Migrate pending
この場合、このsqlが基本的に他のsqlに依存していない場合、
Migrate script
使用方法は
最初と最後の間でロールバックする場合は、元のバージョンIDの代わりに0を使用できます.
ただし、上記のscriptスクリプトについてはmigrate doを直接使用する.sql実行はずっと間違っています!公式には単一のスクリプトの実行についても説明されていません.あとははっきりしてから補充します.
私のプロジェクトは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 table
とundo
を含み、それぞれテーブルの作成と削除コマンドを表しています.-- // 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.sql
migrate 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実行はずっと間違っています!公式には単一のスクリプトの実行についても説明されていません.あとははっきりしてから補充します.