MyBatis でバルク・インサート(複数行一括挿入)を実装するのに multi-row insert を使った例を割と良く見かけます。
ですが、特に挿入対象の行数が多い場合は batch insert の方が良い選択肢となります。
この記事では2つの方法を比較して、なぜ batch insert を使うべきなのか説明します。
テストに使ったプロジェクトは GitHub に置いてあります。
MyBatis でバルク・インサート(複数行一括挿入)を実装するのに multi-row insert を使った例を割と良く見かけます。
ですが、特に挿入対象の行数が多い場合は batch insert の方が良い選択肢となります。
この記事では2つの方法を比較して、なぜ batch insert を使うべきなのか説明します。
テストに使ったプロジェクトは GitHub に置いてあります。
前の投稿 で、新しいロギングの設定では従来のようにステートメント(java.sql.PreparedStatement, java.sql.Statement)と結果(java.sql.ResultSet)のログレベルを別々に指定することができない、と書きましたが、昨日リリースされた 3.1.1 で改善されました。
DEBUG レベルではステートメントのみが出力され、新たに追加された TRACE レベルを指定することで結果を出力することができるようになっています。
MyBatis 3.1.0 ではログレベルをより細かい単位(パッケージ、Mapper、ネームスペース、ステートメント)で設定できるようになり、これに伴ってログ出力の設定方法が変更されています。
バージョン 3.0.x 以前で実行されるクエリの内容や結果を出力する場合、 log4j では下記のように設定していました。
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
3.1.0 で同様の設定を行う場合は、Mapper を含むパッケージに対してログレベルを設定します(上記の設定は不要となります)。例えば Mapper が org.mybatis.example というパッケージ以下に格納されている場合は下記のようになります。
log4j.logger.org.mybatis.example=DEBUG
さらに細かく、例えばあるステートメントのログだけ出力したい場合は下記のように設定します。
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=DEBUG
必要なクエリだけ出力できるので、本番環境でのログ出力など、より柔軟に対応できるようになります。
ただ、従来のようにステートメント(java.sql.PreparedStatement, java.sql.Statement)と結果(java.sql.ResultSet)のログレベルを別々に指定するといった設定は今のところできません。 バージョン 3.1.1 で改善されました。
MyBatis オンラインマニュアル:ロギング