Contents
- 1 インストール
- 2 全体設定
- 2.1 設定ファイル
- 2.2 標準テンプレート
- 2.3 設定項目
- 2.3.1 properties
- 2.3.2 settings
- 2.3.2.1 遅延読み込み
- 2.3.2.2 キャッシュ
- 2.3.2.3 マッピング
- 2.3.2.4 その他
- 2.3.2.4.1 multipleResultSetsEnabled
- 2.3.2.4.2 useColumnLabel
- 2.3.2.4.3 useGeneratedKeys
- 2.3.2.4.4 defaultExecutorType
- 2.3.2.4.5 defaultStatementTimeout
- 2.3.2.4.6 defaultFetchSize
- 2.3.2.4.7 safeRowBoundsEnabled
- 2.3.2.4.8 safeResultHandlerEnabled
- 2.3.2.4.9 jdbcTypeForNull
- 2.3.2.4.10 defaultScriptingLanguage
- 2.3.2.4.11 callSettersOnNulls
- 2.3.2.4.12 logPrefix
- 2.3.2.4.13 logImpl
- 2.3.2.4.14 vfsImpl
- 2.3.2.4.15 useActualParamName
- 2.3.3 typeAliases
- 2.3.4 typeHandlers
- 2.3.5 objectFactory
- 2.3.6 plugins
- 2.3.7 environments
- 2.3.8 databaseIdProvider
- 2.3.9 mappers
- 3 ORマッピング設定
インストール
- 配布サイトから最新のものをダウンロードする。
基本的にzipファイルで良い。
全体設定
設定ファイル
ファイル名は下記である。
mybatis-config.xmlWEBアプリケーションの場合、パスは下記となる。
$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 属性が指定されている場合はそちらの指定が優先されます。
- テンプレート
<setting name="lazyLoadingEnabled" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
false
aggressiveLazyLoading
この設定が有効の場合、オブジェクトのいずれかのメソッド呼び出しと同時にすべての Lazy loading が実行されます。 無効の場合は、各プロパティはそれぞれ要求時に読み込まれます(関連項目 lazyLoadTriggerMethods )。
- テンプレート
<setting name="aggressiveLazyLoading" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
false
(3.4.1 以下は true)
lazyLoadTriggerMethods
Lazy loading のトリガとなる Object のメソッドを指定します。
- テンプレート
<setting name="lazyLoadTriggerMethods" value="<設定値>"/>
- 設定値
メソッド名。カンマで区切ることで、複数記述可能。
- デフォルト
equals,clone,hashCode,toString
configurationFactory
デシリアライズされたオブジェクトの遅延読込(Lazy loading)を行う際に利用される Configuration のインスタンスを返すクラスを指定します。 このクラスには次のシグネチャを持つメソッドが定義されている必要があります。 static Configuration getConfiguration().
- テンプレート
<setting name="configurationFactory" value="<設定値>"/>
- 設定値
タイプエイリアスまたは完全修飾クラス名
- デフォルト
未指定
proxyFactory
Lazy Loading(遅延読み込み)に対応したオブジェクトを生成する際に使用するプロクシツールを指定します。
- テンプレート
<setting name="proxyFactory" value="<設定値>"/>
- 設定値
- CGLIB
- JAVASSIST
- デフォルト
JAVASSIST
キャッシュ
cacheEnabled
キャッシュを有効にするかどうか。
この設定を無効にすると、その他のキャッシュ関連の設定も動作しなくなる。
- テンプレート
<setting name="cacheEnabled" value="<設定値>"/>
- 設定値
- true
キャッシュを有効にする
- true
- false
キャッシュを無効にする
- デフォルト
true
localCacheScope
キャッシュの有効範囲
- テンプレート
<setting name="localCacheScope" value="<設定値>"/>
- 設定値
- SESSION
同一セッション
- SESSION
- STATEMENT
同一ステートメント(DBへの命令)
- デフォルト
SESSION
マッピング
autoMappingBehavior
自動マッピングの動作レベルを指定する。
- テンプレート
<setting name="autoMappingBehavior" value="<設定値>"/>
- 設定値
- NONE
自動マッピングは無効となる
- NONE
- PARTIAL
associationやcollectionなどを含まない単純なresultMapのみが自動マッピングの対象となる
- FULL
ネストされた結果などの複雑なものも含めて全てが自動マッピングの対象となる
- デフォルト
PARTIAL
autoMappingUnknownColumnBehavior
自動マッピング対象のプロパティが存在しないカラムを検知した時の動作を指定する。
- テンプレート
<setting name="autoMappingUnknownColumnBehavior" value="<設定値>"/>
- 設定値
- NONE
何もしない
- NONE
- WARNING
WARNレベルでログを出力する。
※org.apache.ibatis.session.AutoMappingUnknownColumnBehaviorのログレベルをWARNにする。
- FAILING
例外”SqlSessionException”を発生させる
- デフォルト
NONE
mapUnderscoreToCamelCase
データベースにある A_COLUMN のようなアンダースコアを含む列を Camel Case の Java プロパティ aColumn に自動的にマッピングする機能の有効/無効を切り替えます。
- テンプレート
<setting name="mapUnderscoreToCamelCase" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
false
returnInstanceForEmptyRow
取得した列が全てNULLだった場合にNULLを返すかプロパティをNULLにしたインスタンスを返すかを選択する
- テンプレート
<setting name="returnInstanceForEmptyRow" value="<設定値>"/>
- 設定値
- true
プロパティをNULLにしたインスタンスを返す
- true
- false
NULLを返す
- デフォルト
false
その他
multipleResultSetsEnabled
1つのステートメントから複数の ResultSet を返すことを許可するかどうかを指定します(複数 ResultSet に対応したドライバが必要です)。
- テンプレート
<setting name="multipleResultSetsEnabled" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
true
useColumnLabel
<setting name="useColumnLabel" value="true"/>列名の代わりに列ラベルを使用します。 ドライバによって動作が異なります。 ドライバのドキュメントを参照するか、両方のモードを試して動作を確認してください。
- テンプレート
<setting name="useColumnLabel" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
true
useGeneratedKeys
JDBC の generated keys サポートを使用するかどうかを指定します。 Derby のように非互換となっていても動作するドライバに対応するため、true を設定した場合は強制的に generated keys を使用します。
- テンプレート
<setting name="useGeneratedKeys" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
false
defaultExecutorType
デフォルトの executor を指定します。 SIMPLE executor は特別なことは何もしません。 REUSE executor は PreparedStatement を再利用します。 BATCH executor はステートメントを再利用してバッチ更新を実行します。
- テンプレート
<setting name="defaultExecutorType" value="<設定値>"/>
- 設定値
- SIMPLE
- REUSE
- BATCH
- デフォルト
SIMPLE
defaultStatementTimeout
ドライバがデータベースからの応答を待ち続ける秒数(タイムアウト)を設定します。
- テンプレート
<setting name="defaultStatementTimeout" value="<設定値>"/>
- 設定値
- 0
タイムアウトしない - 正の整数(単位:秒)
- 0
- デフォルト
0
defaultFetchSize
検索結果のフェッチサイズを制御するためのドライバヒントを設定します。 このパラメータ値はクエリ毎の設定で上書きできます。
- テンプレート
<setting name="defaultFetchSize" value="<設定値>"/>
- 設定値
正の整数
- デフォルト
なし
safeRowBoundsEnabled
ネストされたステートメントに対してRowBoundsの使用を許可するかどうかを設定します。
- テンプレート
<setting name="safeRowBoundsEnabled" value="<設定値>"/>
- 設定値
- true
RowBoundsの使用を許可しない - false
RowBoundsの使用を許可する
- true
- デフォルト
False
safeResultHandlerEnabled
ネストされたステートメントに対してResultHandlerの使用を許可するかどうかを設定します。
- テンプレート
<setting name="safeResultHandlerEnabled" value="<設定値>"/>
- 設定値
- true
ResultHandlerの使用を許可しない - false
ResultHandlerの使用を許可する
- true
- デフォルト
true
jdbcTypeForNull
引数の JDBC タイプが未指定の場合、null 値に対して割り当てられる JDBC タイプを設定します。 ドライバによっては列に対する JDBC タイプの指定が必須な場合もありますが、NULL, VARCHAR, OTHER などの汎用の型を指定すれば動作するものもあります。
- テンプレート
<setting name="jdbcTypeForNull" value="<設定値>"/>
- 設定値
- NULL
- VARCHAR
- OTHER
- デフォルト
OTHER
defaultScriptingLanguage
ダイナミック SQL を記述する際のデフォルトの言語を指定します。
- テンプレート
<setting name="defaultScriptingLanguage" value="<設定値>"/>
- 設定値
タイプエイリアスまたは完全修飾クラス名
- デフォルト
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
callSettersOnNulls
取得した値が null の場合にセッターあるいは Map の put メソッドを呼び出すかどうかを指定します。 この設定は Map.keySet() や null 値による初期化を利用している場合に有用です。プリミティブ型(int, boolean, 等)に null がセットされることはありません。
- テンプレート
<setting name="callSettersOnNulls" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
false
logPrefix
MyBatis が出力するログに付加される接頭辞を指定します。
- テンプレート
<setting name="logPrefix" value="<設定値>"/>
- 設定値
任意の文字列
- デフォルト
未指定
logImpl
MyBatis のログ出力に使用するロギング実装を指定します。未指定の場合は自動的検出されます。
- テンプレート
<setting name="logImpl" value="<設定値>"/>
- 設定値
- SLF4J
- LOG4J
- LOG4J2
- JDK_LOGGING
- COMMONS_LOGGING
- STDOUT_LOGGING
- NO_LOGGING
- デフォルト
未指定
vfsImpl
VFS 実装クラスを指定します。
- テンプレート
<setting name="vfsImpl" value="<設定値>"/>
- 設定値
完全修飾クラス名(カンマ区切りで複数指定可能)
- デフォルト
未指定
useActualParamName
ステートメントの引数を参照する際、メソッドシグネチャで宣言されている名前で参照できるようにします。 このオプションを有効にする場合、プロジェクトを Java 8 (コンパイラオプション -parameters 付き)でコンパイルする必要があります。
- テンプレート
<setting name="useActualParamName" value="<設定値>"/>
- 設定値
- true
- false
- デフォルト
true
typeAliases
typeHandlers
objectFactory
plugins
environments
environment
transactionManager
dataSource
dataSourceは接続先データベースの設定を行う。
dataSourceには3つの種類が設定可能である。
- POOLED
コネクションをプールする
- 書式
<dataSource type="POOLED">
- 書式
poolPingEnabled
dataSourceタイプがPOOLEDの時のみ使用可能。
コネクションの維持のために定期的にクエリを実行するかどうかを指定する。
- 書式
- 有効
<property name="poolPingEnabled" value="true"/>
- 無効
<property name="poolPingEnabled" value="false"/>
- 有効
- デフォルト
<property name="poolPingEnabled" value="false"/>
poolPingQuery
dataSourceタイプがPOOLEDの時のみ使用可能。
コネクションの維持のために実行するクエリを指定する。
- 書式
<property name="poolPingQuery" value="<クエリ>"/>
- デフォルト
<property name="poolPingQuery" value="NO PING QUERY SET"/>
※通常エラーが返る
- 例
<property name="poolPingQuery" value="select 1"/>
poolPingQuery
dataSourceタイプがPOOLEDの時のみ使用可能。
コネクションの維持のために実行するクエリの実行間隔を指定する。
- 書式
<property name="poolPingConnectionsNotUsedFor" value="<ミリ秒>"/>
設定値が0の場合、ユーザーからのクエリ実行のたびに行う。
- デフォルト
<property name="poolPingConnectionsNotUsedFor" value="0"/>
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属性
- 書式
autoMapping="(true|false)"
notNullColumn属性
コレクションの要素として生成するインスタンスは、コレクション部分の列値が一つでもnullでなければ生成される。
この属性で指定した列がnullの場合は、その行はインスタンス生成されない。
コンマ区切りで複数指定可能。
- 書式
notNullColumn="<列名>[,...]"
SQL
sql
他のステートメントから参照することができる、再利用可能な SQL 文字列です。
insert
マップされた INSERT ステートメントです。
selectKey
データベースで自動付与された値を返す時に使用する。
- 記法
<insert id="<SQLのID>" parameterType="<引数のクラス名>"> insert into <テーブル名> (<列1>[, ...]) values (#{<列変数1>}[, ...]) <selectKey resultType="<結果の型名>" keyProperty="<結果の列名>" order="{ BEFORE | AFTER }"> <追加実行内容> </selectKey> </insert>
- パラメータ
- resultType
数値の場合はint等で、文字列の場合はStringである。 - keyProperty
結果を代入する変数名を指定する。
- resultType
- パラメータ
- order
- -BEFORE
INSERTの前に実行する - -AFTER
INSERTの後に実行する - 値
INSERTと共に実行する内容を記載する。 - -Derbyの場合
values IDENTITY_VAL_LOCAL()
- Javaコード
実行時は通常と同じくSqlSessionのinsertメソッドで行うが、insertメソッドの戻り値は通常通り挿入した行数である。
自動付与された値はinsertメソッドの第2引数で与えるJavaBeansオブジェクトのSetterメソッドにより格納される。
- 例
SqlSession session = ~~~ session.insert(SQL_INSERT, obj); obj.getId();
update
マップされた UPDATE ステートメントです。
delete
マップされた DELETE ステートメントです。
select
マップされた SELECT ステートメントです。
共通事項
変数
- 記法
最低限変数名を記述していれば変数のマッピングは行える。
オプションを指定することで、機能拡張、型チェックなどが行える。
#{<変数名>[,<オプション名>=<オプション値>]}
javaType
Javaソースコード中の型名を指定する
- 記法
javaType=<Java型名>
jdbcType
JDBCで扱う型名を指定する。
このオプションを指定しないと、NULLを代入できる列にNULL値を代入できない。
列のNULL値を取得しMap型にマッピングする場合は全体設定の方でオプション”callSettersOnNulls”の設定が必要。
JavaBeansの場合でもsetterで値代入以外に何らかの操作を行っている場合や、NULL値を明示的に代入しなければならない場合もこの設定が必要。
- 記法
jdbcType=<JDBC型>
代入可能な値はこちらを参照。
- 例
- BLOB
- BOOLEAN
- CHAR
- DOUBLE
- INTEGER
- TIMESTAMP
- VARCHAR
- 例