mybatisConfig.xmlの構成の内容と順序は次のとおりです。
- プロパティ
- 設定(グローバル構成パラメーター)
- typeAliases(タイプエイリアス)
- typeHandlers(タイププロセッサ)
- objectFactory
- プラグイン
- 環境(環境コレクション属性オブジェクト)
- 環境(環境サブ属性オブジェクト)
- transactionManager
- dataSource(データソース)
- 環境(環境サブ属性オブジェクト)
- マッパー
プロパティ
MybatisConfig.xmlは、次のようにjavaプロパティファイルの構成情報を参照できます。
クラスパスの下にdb.propertiesファイルを定義します
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/data
jdbc.username=root
jdbc.password=root
mybatisConfig.xmlは次のように引用されています
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
注:MyBatisは次の順序でプロパティをロードします。
- 最初に、properties要素本体で定義されたプロパティが読み取られます。
- 次に、properties要素のresourceまたはurlによってロードされた属性を読み取り、読み取られた同じ名前の属性を上書きします。
- 最後に、parameterTypeによって渡された属性を読み取り、読み取られた同じ名前の属性を上書きします。
したがって、parameterTypeを介して渡される属性は、優先順位が最も高く、次にリソースまたはURLによってロードされる属性が続きます。優先順位が最も低いのは、properties要素の本体で定義されている属性です。
設定
Mybatisグローバル構成パラメーター。グローバルパラメーターは、mybatisの実行動作に影響します。完全に構成された設定要素の例は次のとおりです。
<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>
パラメータの設定 | 説明文 | 実効値 | デフォルト値 |
cacheEnabled | 構成ファイル内のすべてのマッパーによって構成されたキャッシュをグローバルにオンまたはオフにします。 | 真| 偽 | 真 |
lazyLoadingEnabled | 遅延読み込みのグローバルスイッチ。オンにすると、関連付けられているすべてのオブジェクトが遅延ロードされます。fetchTypeプロパティを設定して、特定の関連付けのアイテムのオン/オフ状態をオーバーライドできます。 | 真| 偽 | 偽 |
aggressiveLazyLoading | オンにすると、メソッド呼び出しはオブジェクトのすべてのプロパティをロードします。それ以外の場合、各プロパティは必要に応じて読み込まれます(lazyLoadTriggerMethodsを参照)。 | 真| 偽 | false(3.4.1以下でtrue) |
multipleResultSetsEnabled | 1つのステートメントが複数の結果セットを返すことを許可するかどうか(互換性のあるドライバーが必要)。 | 真| 偽 | 真 |
useColumnLabel | 列名の代わりに列ラベルを使用します。この点に関しては、ドライバによってパフォーマンスが異なります。詳細については、関連するドライバのドキュメントを参照するか、これら2つの異なるモードをテストして、使用したドライバの結果を確認してください。 | 真| 偽 | 真 |
useGeneratedKeys | JDBCが主キーの自動生成をサポートできるようにするには、ドライバーの互換性が必要です。trueに設定されている場合、この設定は、自動生成された主キーの使用を強制しますが、一部のドライバーは互換性がなくても正常に機能します(Derbyなど)。 | 真| 偽 | 偽 |
autoMappingBehavior | MyBatisが列をフィールドまたはプロパティに自動的にマップする方法を指定します。NONEは自動マッピングのキャンセルを意味し、PARTIALはネストされた結果セットマッピングを定義していない結果セットのみを自動的にマッピングします。FULLは、(ネストされているかどうかにかかわらず)複雑な結果セットを自動的にマップします。 | なし、部分的、完全 | 部分的 |
autoMappingUnknownColumnBehavior | ターゲットの不明な列(または不明な属性タイプ)を自動的に検出する動作を指定します。 | なし、警告、失敗 | なし |
なし:応答なし | |||
警告:リマインダーログを出力します( 'org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'ログレベルをWARNに設定する必要があります) | |||
失敗:マッピングに失敗しました(SqlSessionExceptionをスローします) | |||
defaultExecutorType | デフォルトのアクチュエータを設定します。SIMPLEは通常のエグゼキューターです。REUSEエグゼキューターは準備されたステートメントを再利用し、BATCHエグゼキューターはステートメントを再利用してバッチ更新を実行します。 | シンプルな再利用バッチ | シンプル |
defaultStatementTimeout | ドライバーがデータベースからの応答を待つ秒数を決定するタイムアウト期間を設定します。 | 正の整数 | 設定されていません(null) |
defaultFetchSize | フェッチされた結果セットの数のヒント値を設定します(fetchSize)。このパラメーターは、クエリ設定でのみオーバーライドできます。 | 正の整数 | 設定されていません(null) |
safeRowBoundsEnabled | ネストされたステートメントでページネーション(RowBounds)を許可します。許可されている場合はfalseに設定します。 | 真| 偽 | 偽 |
safeResultHandlerEnabled | ネストされたステートメントでページング(ResultHandler)を許可します。許可されている場合はfalseに設定します。 | 真| 偽 | 真 |
mapUnderscoreToCamelCase | キャメルケースの命名規則(キャメルケース)の自動マッピングを有効にするかどうか。つまり、従来のデータベース列名A_COLUMNから従来のJavaプロパティ名aColumnへの同様のマッピング。 | 真| 偽 | 偽 |
localCacheScope | MyBatisはローカルキャッシュを使用して循環参照を防止し、繰り返しネストされたクエリを高速化します。デフォルト値はSESSIONです。この場合、1つのセッションで実行されたすべてのクエリがキャッシュされます。設定値がSTATEMENTの場合、ローカルセッションはステートメントの実行にのみ使用され、同じSqlSessionへの異なる呼び出しはデータを共有しません。 | セッション| ステートメント | セッション |
jdbcTypeForNull | パラメーターに特定のJDBCタイプが指定されていない場合は、NULL値のJDBCタイプを指定してください。一部のドライバでは、列のJDBCタイプを指定する必要があります。ほとんどの場合、NULL、VARCHAR、OTHERなどの一般的なタイプを直接使用できます。 | JdbcType定数。そのほとんどは、NULL、VARCHAR、およびOTHERです。 | その他 |
lazyLoadTriggerMethods | どのオブジェクトが遅延ロードをトリガーするかを指定する方法。 | メソッドのコンマ区切りリスト。 | 等しい、クローン、ハッシュコード、toString |
defaultScriptingLanguage | 動的SQL生成のデフォルト言語を指定します。 | 一个类型别名或完全限定类名。 | org.apache.ibatis.scripting.xmltags.XMLLanguageDriver |
defaultEnumTypeHandler | 指定 Enum 使用的默认 TypeHandler 。 (从3.4.5开始) | 一个类型别名或完全限定类名。 | org.apache.ibatis.type.EnumTypeHandler |
callSettersOnNulls | 指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这对于有 Map.keySet() 依赖或 null 值初始化的时候是有用的。注意基本类型(int、boolean等)是不能设置成 null 的。 | true | false | FALSE |
returnInstanceForEmptyRow | 当返回行的所有列都是空时,MyBatis默认返回null。 当开启这个设置时,MyBatis会返回一个空实例。 请注意,它也适用于嵌套的结果集 (i.e. collectioin and association)。(从3.4.2开始) | true | false | FALSE |
logPrefix | 指定 MyBatis 增加到日志名称的前缀。 | 任何字符串 | Not set |
logImpl | 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。 | SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING | Not set |
proxyFactory | 指定 Mybatis 创建具有延迟加载能力的对象所用到的代理工具。 | CGLIB | JAVASSIST | JAVASSIST (MyBatis 3.3 or above) |
vfsImpl | 指定VFS的实现 | 自定义VFS的实现的类全限定名,以逗号分隔。 | Not set |
useActualParamName | 允许使用方法签名中的名称作为语句参数名称。 为了使用该特性,你的工程必须采用Java 8编译,并且加上-parameters选项。(从3.4.1开始) | true | false | TRUE |
configurationFactory | 指定一个提供Configuration实例的类。 这个被返回的Configuration实例用来加载被反序列化对象的懒加载属性值。 这个类必须包含一个签名方法static Configuration getConfiguration(). (从 3.2.3 版本开始) | 类型别名或者全类名. | Not set |
typeAliases(类型别名)
别名 |
映射的类型 |
_byte |
byte |
_long |
long |
_short |
short |
_int |
int |
_integer |
int |
_double |
double |
_float |
float |
_boolean |
boolean |
string |
String |
byte |
Byte |
long |
Long |
short |
Short |
int |
Integer |
integer |
Integer |
double |
Double |
float |
Float |
boolean |
Boolean |
date |
Date |
decimal |
BigDecimal |
bigdecimal |
BigDecimal |
object |
Object |
map |
Map |
hashmap |
HashMap |
list |
List |
arraylist |
ArrayList |
collection |
Collection |
iterator |
Iterator |
自定义别名:
<typeAliases>
<!-- 单个别名定义 -->
<typeAlias alias="user" type="org.haiwen.entity.User"/>
<!-- 批量别名定义,扫描整个包下的类,别名为类名(首字母大写或小写都可以) -->
<package name="org.haiwen.entity"/>
<package name="其它包"/>
</typeAliases>
typeHandlers(类型处理器)
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
类型处理器 | Java 类型 | JDBC 类型 |
BooleanTypeHandler | java.lang.Boolean, boolean | 数据库兼容的 BOOLEAN |
ByteTypeHandler | java.lang.Byte, byte | 数据库兼容的 NUMERIC 或 BYTE |
ShortTypeHandler | java.lang.Short, short | 数据库兼容的 NUMERIC 或 SHORT INTEGER |
IntegerTypeHandler | java.lang.Integer, int | 数据库兼容的 NUMERIC 或 INTEGER |
LongTypeHandler | java.lang.Long, long | 数据库兼容的 NUMERIC 或 LONG INTEGER |
FloatTypeHandler | java.lang.Float, float | 数据库兼容的 NUMERIC 或 FLOAT |
DoubleTypeHandler | java.lang.Double, double | 数据库兼容的 NUMERIC 或 DOUBLE |
BigDecimalTypeHandler | java.math.BigDecimal | 数据库兼容的 NUMERIC 或 DECIMAL |
StringTypeHandler | java.lang.String | CHAR, VARCHAR |
ClobReaderTypeHandler | java.io.Reader | - |
ClobTypeHandler | java.lang.String | CLOB, LONGVARCHAR |
NStringTypeHandler | java.lang.String | NVARCHAR, NCHAR |
NClobTypeHandler | java.lang.String | NCLOB |
BlobInputStreamTypeHandler | java.io.InputStream | - |
ByteArrayTypeHandler | byte[] | 数据库兼容的字节流类型 |
BlobTypeHandler | byte[] | BLOB, LONGVARBINARY |
DateTypeHandler | java.util.Date | TIMESTAMP |
DateOnlyTypeHandler | java.util.Date | DATE |
TimeOnlyTypeHandler | java.util.Date | TIME |
SqlTimestampTypeHandler | java.sql.Timestamp | TIMESTAMP |
SqlDateTypeHandler | java.sql.Date | DATE |
SqlTimeTypeHandler | java.sql.Time | TIME |
ObjectTypeHandler | Any | OTHER 或未指定类型 |
EnumTypeHandler | Enumeration Type | VARCHAR-任何兼容的字符串类型,存储枚举的名称(而不是索引) |
EnumOrdinalTypeHandler | Enumeration Type | 任何兼容的 NUMERIC 或 DOUBLE 类型,存储枚举的索引(而不是名称)。 |
InstantTypeHandler | java.time.Instant | TIMESTAMP |
LocalDateTimeTypeHandler | java.time.LocalDateTime | TIMESTAMP |
LocalDateTypeHandler | java.time.LocalDate | DATE |
LocalTimeTypeHandler | java.time.LocalTime | TIME |
OffsetDateTimeTypeHandler | java.time.OffsetDateTime | TIMESTAMP |
OffsetTimeTypeHandler | java.time.OffsetTime | TIME |
ZonedDateTimeTypeHandler | java.time.ZonedDateTime | TIMESTAMP |
YearTypeHandler | java.time.Year | INTEGER |
MonthTypeHandler | java.time.Month | INTEGER |
YearMonthTypeHandler | java.time.YearMonth | VARCHAR or LONGVARCHAR |
JapaneseDateTypeHandler | java.time.chrono.JapaneseDate | DATE |
mappers(映射器)
Mapper配置的几种方法:
使用相对于类路径的资源:<mapper resource=" " />
如:<mapper resource="sqlmap/User.xml" />
使用完全限定路径:<mapper url=" " />
如:<mapper url="file:///D:\workspace_spingmvc\mybatis_01\config\sqlmap\User.xml" />
使用mapper接口类路径:<mapper class=" " />
如:<mapper class="cn.itcast.mybatis.mapper.UserMapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。
注册指定包下的所有mapper接口:<package name=""/>
如:<package name="cn.itcast.mybatis.mapper"/>
注意:此种方法要求mapper接口名称和mapper映射文件名称相同,且放在同一个目录中。