MyBatis

Contents

インストール


  1. 配布サイトから最新のものをダウンロードする。
    基本的にzipファイルで良い。

全体設定



設定ファイル


ファイル名は下記である。
mybatis-config.xml
WEBアプリケーションの場合、パスは下記となる。
$WEBAPP_ROOT/WebContent/WEB-INF/classes/mybatis-config.xml
※$WEBAPP_ROOTは各開発・実行環境によって異なる。

標準テンプレート


XMLファイルに記述し、ROOTエレメント”configuration”下に各設定可能な個別の要素が存在する。
設定を行わない要素は削除してよい。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
	PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties>
		... 個別の設定項目を記述する ...
	</properties>
	<settings>
		... 個別の設定項目を記述する ...
	</settings>
	<typeAliases>
		... 個別の設定項目を記述する ...
	</typeAliases>
	<typeHandlers>
		... 個別の設定項目を記述する ...
	</typeHandlers>
	<objectFactory>
		... 個別の設定項目を記述する ...
	</objectFactory>
	<plugins>
		... 個別の設定項目を記述する ...
	</plugins>
	<environments>
		 <environment>
		 	<transactionManager>
				... 個別の設定項目を記述する ...
			</transactionManager>
		 	<dataSource>
				... 個別の設定項目を記述する ...
			</dataSource>
		</environment>
	</environments>
	<databaseIdProvider>
		... 個別の設定項目を記述する ...
	</databaseIdProvider>
	<mappers>
		... 個別の設定項目を記述する ...
	</mappers>
</configuration>


設定項目


properties




settings


遅延読み込み


lazyLoadingEnabled

Lazy Loading(遅延読み込み)の有効/無効を切り替えるグローバルな設定です。 無効にした場合、association として指定されているデータは直ちに読み込まれます。 association 要素で fetchType 属性が指定されている場合はそちらの指定が優先されます。




aggressiveLazyLoading

この設定が有効の場合、オブジェクトのいずれかのメソッド呼び出しと同時にすべての Lazy loading が実行されます。 無効の場合は、各プロパティはそれぞれ要求時に読み込まれます(関連項目 lazyLoadTriggerMethods )。




lazyLoadTriggerMethods

Lazy loading のトリガとなる Object のメソッドを指定します。




configurationFactory

デシリアライズされたオブジェクトの遅延読込(Lazy loading)を行う際に利用される Configuration のインスタンスを返すクラスを指定します。 このクラスには次のシグネチャを持つメソッドが定義されている必要があります。 static Configuration getConfiguration().




proxyFactory

Lazy Loading(遅延読み込み)に対応したオブジェクトを生成する際に使用するプロクシツールを指定します。





キャッシュ


cacheEnabled

キャッシュを有効にするかどうか。
この設定を無効にすると、その他のキャッシュ関連の設定も動作しなくなる。





localCacheScope

キャッシュの有効範囲





マッピング


autoMappingBehavior

自動マッピングの動作レベルを指定する。






autoMappingUnknownColumnBehavior

自動マッピング対象のプロパティが存在しないカラムを検知した時の動作を指定する。






mapUnderscoreToCamelCase

データベースにある A_COLUMN のようなアンダースコアを含む列を Camel Case の Java プロパティ aColumn に自動的にマッピングする機能の有効/無効を切り替えます。




returnInstanceForEmptyRow

取得した列が全てNULLだった場合にNULLを返すかプロパティをNULLにしたインスタンスを返すかを選択する






その他


multipleResultSetsEnabled

1つのステートメントから複数の ResultSet を返すことを許可するかどうかを指定します(複数 ResultSet に対応したドライバが必要です)。




useColumnLabel

  <setting name="useColumnLabel" value="true"/>
列名の代わりに列ラベルを使用します。 ドライバによって動作が異なります。 ドライバのドキュメントを参照するか、両方のモードを試して動作を確認してください。




useGeneratedKeys

JDBC の generated keys サポートを使用するかどうかを指定します。 Derby のように非互換となっていても動作するドライバに対応するため、true を設定した場合は強制的に generated keys を使用します。




defaultExecutorType

デフォルトの executor を指定します。 SIMPLE executor は特別なことは何もしません。 REUSE executor は PreparedStatement を再利用します。 BATCH executor はステートメントを再利用してバッチ更新を実行します。




defaultStatementTimeout

ドライバがデータベースからの応答を待ち続ける秒数(タイムアウト)を設定します。




defaultFetchSize

検索結果のフェッチサイズを制御するためのドライバヒントを設定します。 このパラメータ値はクエリ毎の設定で上書きできます。




safeRowBoundsEnabled

ネストされたステートメントに対してRowBoundsの使用を許可するかどうかを設定します。




safeResultHandlerEnabled

ネストされたステートメントに対してResultHandlerの使用を許可するかどうかを設定します。




jdbcTypeForNull

引数の JDBC タイプが未指定の場合、null 値に対して割り当てられる JDBC タイプを設定します。 ドライバによっては列に対する JDBC タイプの指定が必須な場合もありますが、NULL, VARCHAR, OTHER などの汎用の型を指定すれば動作するものもあります。




defaultScriptingLanguage

ダイナミック SQL を記述する際のデフォルトの言語を指定します。




callSettersOnNulls

取得した値が null の場合にセッターあるいは Map の put メソッドを呼び出すかどうかを指定します。 この設定は Map.keySet() や null 値による初期化を利用している場合に有用です。プリミティブ型(int, boolean, 等)に null がセットされることはありません。




logPrefix

MyBatis が出力するログに付加される接頭辞を指定します。




logImpl

MyBatis のログ出力に使用するロギング実装を指定します。未指定の場合は自動的検出されます。




vfsImpl

VFS 実装クラスを指定します。




useActualParamName

ステートメントの引数を参照する際、メソッドシグネチャで宣言されている名前で参照できるようにします。 このオプションを有効にする場合、プロジェクトを Java 8 (コンパイラオプション -parameters 付き)でコンパイルする必要があります。




typeAliases




typeHandlers




objectFactory




plugins




environments


environment


transactionManager

dataSource

dataSourceは接続先データベースの設定を行う。
dataSourceには3つの種類が設定可能である。



poolPingEnabled

dataSourceタイプがPOOLEDの時のみ使用可能。
コネクションの維持のために定期的にクエリを実行するかどうかを指定する。



poolPingQuery

dataSourceタイプがPOOLEDの時のみ使用可能。
コネクションの維持のために実行するクエリを指定する。




poolPingQuery

dataSourceタイプがPOOLEDの時のみ使用可能。
コネクションの維持のために実行するクエリの実行間隔を指定する。



databaseIdProvider




mappers





ORマッピング設定



設定ファイル


ファイル名は全体設定の方で指定するので、任意のファイル名で良い。
配置は全体設定ファイルと同じパスにしておけば指定がしやすくて良い。
WEBアプリケーションの場合、下記となる。
$WEBAPP_ROOT/WebContent/WEB-INF/classes
※$WEBAPP_ROOTは各開発・実行環境によって異なる。

標準テンプレート


XMLファイルに記述し、ROOTエレメント”mapper”下に各設定可能な個別の要素が存在する。
設定を行わない要素は削除してよい。
子エレメントの記述順序は下記の通りでなければならない。
エレメント”mapper”の属性”namespace”は省略可能である。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
	PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace=<ネームスペース>>
	<cache>
		... 個別の設定項目を記述する ...
	</cache>
	<cache-ref>
		... 個別の設定項目を記述する ...
	</cache-ref>
	<sql>
		... 個別の設定項目を記述する ...
	</sql>
	<insert>
		... 個別の設定項目を記述する ...
	</insert>
	<update>
		... 個別の設定項目を記述する ...
	</update>
	<delete>
		... 個別の設定項目を記述する ...
	</delete>
	<select>
		... 個別の設定項目を記述する ...
	</select>
</configuration>


設定内容


cache


指定されたネームスペースに対するキャッシュの設定です。

cache-ref


別のネームスペースで定義されているキャッシュ設定を参照します。

resultMap


データベースから取得した結果セットを Java オブジェクトにマッピングするための情報を記述する、最も複雑で強力な要素です。

collection


データベースから取得した結果セットのうち繰り返し要素をコレクションとして格納する。
つまり、コレクション部分の列値以外は固定で、コレクション部分の列値のみ異なる行を同じインスタンスとして扱える。


property属性


ofType属性


autoMapping属性



notNullColumn属性

コレクションの要素として生成するインスタンスは、コレクション部分の列値が一つでもnullでなければ生成される。
この属性で指定した列がnullの場合は、その行はインスタンス生成されない。
コンマ区切りで複数指定可能。


SQL


sql


他のステートメントから参照することができる、再利用可能な SQL 文字列です。

insert


マップされた INSERT ステートメントです。

selectKey

データベースで自動付与された値を返す時に使用する。





update


マップされた UPDATE ステートメントです。

delete


マップされた DELETE ステートメントです。

select


マップされた SELECT ステートメントです。

共通事項


変数


javaType

Javaソースコード中の型名を指定する


jdbcType

JDBCで扱う型名を指定する。
このオプションを指定しないと、NULLを代入できる列にNULL値を代入できない。

列のNULL値を取得しMap型にマッピングする場合は全体設定の方でオプション”callSettersOnNulls”の設定が必要。
JavaBeansの場合でもsetterで値代入以外に何らかの操作を行っている場合や、NULL値を明示的に代入しなければならない場合もこの設定が必要。


Notice: Trying to get property 'queue' of non-object in /usr/local/wordpress/wp-includes/script-loader.php on line 2876

Warning: Invalid argument supplied for foreach() in /usr/local/wordpress/wp-includes/script-loader.php on line 2876