設定は、MyBatis で最も複雑な構成です。MyBatis の基本的な動作に重大な影響を与える可能性がありますが、ほとんどの場合、デフォルト値で実行できるため、ほとんどの場合、大量に構成する必要はなく、必要なのは、自動マッピング、キャメルケースの名前付けマッピング、カスケード ルール、キャッシュを有効にするかどうか、Executor タイプなど、一般的に使用されるルールを変更するだけで十分です。設定構成項目の説明を表 1 に示します。
構成アイテム | 効果 | 構成オプション | デフォルト |
---|---|---|---|
キャッシュ有効 | この設定は、すべてのマッパーの設定キャッシュのグローバル スイッチに影響します。 | true|false | 真実 |
遅延読み込み有効 | 遅延読み込み用のグローバル スイッチ。有効にすると、関連するすべてのオブジェクトが遅延ロードされます。特定の関係では、項目のスイッチ状態は fetchType 属性を設定することでオーバーライドできます。 | true|false | 間違い |
アグレッシブなLazyLoading | 有効にすると、遅延プロパティを呼び出すと、遅延ロードされたプロパティを持つオブジェクトが完全にロードされます。それ以外の場合、各プロパティはオンデマンドでロードされます。 | 脅威|フェルス | バージョン 3.4.1 (含まれていない) より前は true 、バージョン 3.4.1 以降は false |
複数の結果セットが有効 | 1 つのステートメントが複数の結果セットを返すことを許可するかどうか (互換性のあるドライバーが必要) | true|false | 真実 |
useColumnLabel | 列名の代わりに列ラベルを使用します。ドライバーが異なればパフォーマンスも異なります。詳細については、関連するドライバーのドキュメントを参照するか、これら 2 つの異なるモードをテストして使用したドライバーの結果を観察してください。 | true|false | 真実 |
useGeneratedKeys | JDBC が主キーの自動生成をサポートできるようにするには、ドライバーの互換性が必要です。true に設定すると、この設定により自動生成された主キーの使用が強制されます。ただし、一部のドライバーには互換性がなくても機能します (Derby など)。 | true|false | 間違い |
自動マッピング動作 | MyBatis が列をフィールドまたはプロパティに自動的にマップする方法を指定します。 NONE は自動マッピングをキャンセルすることを意味します。 PARTIAL は、自動的にマップされるだけであり、ネストされた結果セットとマップされた結果セットは定義されないことを意味します。 FULL は、(ネストされているかどうかに関係なく) 任意の複雑な結果セットを自動的にマップします。 |
なし、一部、完全 | 部分的 |
autoMappingUnknownColumnBehavior | 自動マップ内の不明な列 (または不明な属性タイプ) の動作を指定します。デフォルトでは処理なし、ログレベルがWARNレベル以下の場合のみ該当ログが表示されます、処理に失敗した場合はSqlSessionExceptionがスローされます | なし、警告、失敗 | なし |
デフォルトエグゼキュータタイプ | デフォルトのエグゼキュータを構成します。SIMPLE は通常の実行プログラムです。REUSE は準備されたステートメントを再利用します。BATCH 実行プログラムはステートメントを再利用してバッチ更新を実行します。 | シンプル、再利用、バッチ | 単純 |
デフォルトステートメントタイムアウト | タイムアウトを設定します。これにより、ドライバーがデータベースからの応答を待つ秒数が決まります。 | 任意の正の整数 | 未設定 (null) |
デフォルトフェッチサイズ | デフォルトでデータベースドライバーによって返されるレコード数の制限を設定します。このパラメーターはリセットできます。 | 任意の正の整数 | 未設定 (null) |
safeRowBoundsEnabled | ネストされたステートメントでページネーション (RowBounds) を許可します。許可される場合は false を設定します | true|false | 間違い |
safeResultHandlerEnabled | ネストされたステートメントでページネーション (ResultHandler) を許可します。許可される場合は false を設定します | true|false | 真実 |
マップアンダースコアをキャメルケースに | 自動キャメルケース マッピング、つまり、クラシック データベース列名 A_COLUMN からクラシック Javaプロパティ名 aColumn への 同様のマッピングを有効にするかどうか。 | true|false | 間違い |
ローカルキャッシュスコープ |
MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速联复嵌套査询。 默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlScssion 的不同调用将不会共享数据 |
SESSION|STATEMENT | SESSION |
jdbcTypeForNull |
当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER | NULL、VARCHAR、OTHER | OTHER |
lazyLoadTriggerMethods |
指定哪个对象的方法触发一次延迟加载 | — | equals、clone、hashCode、toString |
defaultScriptingLanguage |
指定动态 SQL 生成的默认语言 | — | org.apache.ibatis .script.ing.xmltags .XMLDynamicLanguageDriver |
callSettersOnNulls |
指定当结果集中值为 null 时,是否调用映射对象的 setter(map 对象时为 put)方法,这对于 Map.kcySet() 依赖或 null 值初始化时是有用的。注意,基本类型(int、boolean 等)不能设置成 null | true|false | false |
logPrefix |
指定 MyBatis 增加到日志名称的前缀 | 任何字符串 | Not set |
loglmpl |
指定 MyBatis 所用日志的具体实现,未指定时将自动査找 | SLF4J|LOG4J|LOG4J2|JDK_LOGGING |COMMONS_LOGGING |ST DOUT_LOGGING|NO_LOGGING |
Not set |
proxyFactory | 指定 MyBatis 创建具有延迟加栽能力的对象所用到的代理工具 | CGLIB|JAVASSIST | JAVASSIST (MyBatis 版本为 3.3 及以上的) |
vfsImpl | 指定 VFS 的实现类 | 提供 VFS 类的全限定名,如果存在多个,可以使用逗号分隔 | Not set |
useActualParamName | 允许用方法参数中声明的实际名称引用参数。要使用此功能,项目必须被编译为 Java 8 参数的选择。(从版本 3.4.1 开始可以使用) | true|false | true |
settings 的配置项很多,但是真正用到的不会太多,我们把常用的配置项研究清楚就可以了,比如关于缓存的 cacheEnabled,关于级联的 lazyLoadingEnabled 和 aggressiveLazy Loading,关于自动映射的 autoMappingBehavior 和 mapUnderscoreToCamelCase,关于执行器类型的 defaultExecutorType 等。
这里给出一个全量的配置样例,如下所示。
<settings> <setting name="cacheEnabled" value="true"/> <setting name="lazyLoadingEnabled" value="true"/> <setting name="multipleResultSetsEnabled" value="true"/> <setting name="useColumnLabel" value="true"/> <setting name="useGeneratedKeys" value="false"/> <setting name="autoMappingBehavior" value="PARTIAL"/> <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25"/> <setting name="defaultFetchSize" value="100"/> <setting name="safeRowBoundsEnabled" value="false"/> <setting name="mapUnderscoreToCamelCase" value="false"/> <setting name="localCacheScope" value="SESSION"/> <setting name="jdbcTypeForNull" value="OTHER"/> <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> </settings>