/
configuration.xml
1877 lines (1805 loc) · 68.7 KB
/
configuration.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright 2009-2020 the original author or authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
<properties>
<title>MyBatis 3 | 配置</title>
<author email="clinton.begin@gmail.com">Clinton Begin</author>
<author email="nanlei1987@gmail.com">Nan Lei</author>
<author email="echowdx@gmail.com">Dongxu Wang</author>
</properties>
<body>
<section name="配置">
<p>MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。
配置文档的顶层结构如下:</p>
<ul>
<li>
configuration(配置)
<ul>
<li><a href="#properties">properties(属性)</a></li>
<li><a href="#settings">settings(设置)</a></li>
<li><a href="#typeAliases">typeAliases(类型别名)</a></li>
<li><a href="#typeHandlers">typeHandlers(类型处理器)</a></li>
<li><a href="#objectFactory">objectFactory(对象工厂)</a></li>
<li><a href="#plugins">plugins(插件)</a></li>
<li><a href="#environments">environments(环境配置)</a>
<ul>
<li>
environment(环境变量)
<ul>
<li>transactionManager(事务管理器)</li>
<li>dataSource(数据源)</li>
</ul>
</li>
</ul>
</li>
<li><a href="#databaseIdProvider">databaseIdProvider(数据库厂商标识)</a></li>
<li><a href="#mappers">mappers(映射器)</a></li>
</ul>
</li>
</ul>
<subsection name="属性(properties)" id="properties">
<p>这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。例如:</p>
<source><![CDATA[<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>]]></source>
<p>设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值。比如:
</p>
<source><![CDATA[<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>]]></source>
<p>这个例子中的 username 和 password 将会由 properties 元素中设置的相应值来替换。
driver 和 url 属性将会由 config.properties 文件中对应的值来替换。这样就为配置提供了诸多灵活选择。</p>
<p>也可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值。例如:</p>
<source><![CDATA[SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, props);
// ... 或者 ...
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, props);
]]></source>
<p>如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:</p>
<ul>
<li>首先读取在 properties 元素体内指定的属性。
</li>
<li>然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据
url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
</li>
<li>最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
</li>
</ul>
<p>因此,通过方法参数传递的属性具有最高优先级,resource/url
属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。</p>
<p>
从 MyBatis 3.4.2 开始,你可以为占位符指定一个默认值。例如:
</p>
<source><![CDATA[
<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${username:ut_user}"/> <!-- 如果属性 'username' 没有被配置,'username' 属性的值将为 'ut_user' -->
</dataSource>]]></source>
<p>
这个特性默认是关闭的。要启用这个特性,需要添加一个特定的属性来开启这个特性。例如:
</p>
<source><![CDATA[
<properties resource="org/mybatis/example/config.properties">
<!-- ... -->
<property name="org.apache.ibatis.parsing.PropertyParser.enable-default-value" value="true"/> <!-- 启用默认值特性 -->
</properties>]]></source>
<p>
<span class="label important">提示</span>
如果你在属性名中使用了 <code>":"</code>
字符(如:<code>db:username</code>),或者在 SQL
映射中使用了 OGNL 表达式的三元运算符(如: <code>${tableName != null ?
tableName : 'global_constants'}</code>),就需要设置特定的属性来修改分隔属性名和默认值的字符。例如:
</p>
<source><![CDATA[
<properties resource="org/mybatis/example/config.properties">
<!-- ... -->
<property name="org.apache.ibatis.parsing.PropertyParser.default-value-separator" value="?:"/> <!-- 修改默认值的分隔符 -->
</properties>]]></source>
<source><![CDATA[
<dataSource type="POOLED">
<!-- ... -->
<property name="username" value="${db:username?:ut_user}"/>
</dataSource>]]></source>
</subsection>
<subsection name="设置(settings)" id="settings">
<p>这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
下表描述了设置中各项设置的含义、默认值等。</p>
<table>
<thead>
<tr>
<th>设置名</th>
<th>描述</th>
<th>有效值</th>
<th>默认值</th>
</tr>
</thead>
<tbody>
<tr>
<td>
cacheEnabled
</td>
<td>
全局性地开启或关闭所有映射器配置文件中已配置的任何缓存。
</td>
<td>
true | false
</td>
<td>
true
</td>
</tr>
<tr>
<td>
lazyLoadingEnabled
</td>
<td>
延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。
特定关联关系中可通过设置 <code>fetchType</code>
属性来覆盖该项的开关状态。
</td>
<td>
true | false
</td>
<td>
false
</td>
</tr>
<tr>
<td>
aggressiveLazyLoading
</td>
<td>
开启时,任一方法的调用都会加载该对象的所有延迟加载属性。
否则,每个延迟加载属性会按需加载(参考 <code>lazyLoadTriggerMethods</code>)。
</td>
<td>
true | false
</td>
<td>
false (在 3.4.1 及之前的版本中默认为 true)
</td>
</tr>
<tr>
<td>
multipleResultSetsEnabled
</td>
<td>
是否允许单个语句返回多结果集(需要数据库驱动支持)。
</td>
<td>
true | false
</td>
<td>
true
</td>
</tr>
<tr>
<td>
useColumnLabel
</td>
<td>
使用列标签代替列名。实际表现依赖于数据库驱动,具体可参考数据库驱动的相关文档,或通过对比测试来观察。
</td>
<td>
true | false
</td>
<td>
true
</td>
</tr>
<tr>
<td>
useGeneratedKeys
</td>
<td>
允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为
true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。
</td>
<td>
true | false
</td>
<td>
False
</td>
</tr>
<tr>
<td>
autoMappingBehavior
</td>
<td>
指定 MyBatis 应如何自动映射列到字段或属性。
NONE 表示关闭自动映射;PARTIAL 只会自动映射没有定义嵌套结果映射的字段。
FULL 会自动映射任何复杂的结果集(无论是否嵌套)。
</td>
<td>
NONE, PARTIAL, FULL
</td>
<td>
PARTIAL
</td>
</tr>
<tr>
<td>
autoMappingUnknownColumnBehavior
</td>
<td>
指定发现自动映射目标未知列(或未知属性类型)的行为。
<ul>
<li><code>NONE</code>: 不做任何反应</li>
<li><code>WARNING</code>:
输出警告日志(<code>'org.apache.ibatis.session.AutoMappingUnknownColumnBehavior'</code>
的日志等级必须设置为 <code>WARN</code>)</li>
<li><code>FAILING</code>: 映射失败 (抛出 <code>SqlSessionException</code>)</li>
</ul>
</td>
<td>
NONE, WARNING, FAILING
</td>
<td>
NONE
</td>
</tr>
<tr>
<td>
defaultExecutorType
</td>
<td>
配置默认的执行器。SIMPLE 就是普通的执行器;REUSE 执行器会重用预处理语句(PreparedStatement);
BATCH 执行器不仅重用语句还会执行批量更新。
</td>
<td>
SIMPLE
REUSE
BATCH
</td>
<td>
SIMPLE
</td>
</tr>
<tr>
<td>
defaultStatementTimeout
</td>
<td>
设置超时时间,它决定数据库驱动等待数据库响应的秒数。
</td>
<td>
任意正整数
</td>
<td>
未设置 (null)
</td>
</tr>
<tr>
<td>
defaultFetchSize
</td>
<td>
为驱动的结果集获取数量(fetchSize)设置一个建议值。此参数只可以在查询设置中被覆盖。
</td>
<td>
任意正整数
</td>
<td>
未设置 (null)
</td>
</tr>
<tr>
<td>
defaultResultSetType
</td>
<td>
指定语句默认的滚动策略。(新增于 3.5.2)
</td>
<td>
FORWARD_ONLY | SCROLL_SENSITIVE | SCROLL_INSENSITIVE | DEFAULT(等同于未设置)
</td>
<td>
未设置 (null)
</td>
</tr>
<tr>
<td>
safeRowBoundsEnabled
</td>
<td>
是否允许在嵌套语句中使用分页(RowBounds)。如果允许使用则设置为 false。
</td>
<td>
true | false
</td>
<td>
False
</td>
</tr>
<tr>
<td>
safeResultHandlerEnabled
</td>
<td>
是否允许在嵌套语句中使用结果处理器(ResultHandler)。如果允许使用则设置为 false。
</td>
<td>
true | false
</td>
<td>
True
</td>
</tr>
<tr>
<td>
mapUnderscoreToCamelCase
</td>
<td>
是否开启驼峰命名自动映射,即从经典数据库列名
A_COLUMN 映射到经典 Java 属性名 aColumn。
</td>
<td>
true | false
</td>
<td>
False
</td>
</tr>
<tr>
<td>
localCacheScope
</td>
<td>
MyBatis 利用本地缓存机制(Local Cache)防止循环引用和加速重复的嵌套查询。
默认值为 SESSION,会缓存一个会话中执行的所有查询。
若设置值为 STATEMENT,本地缓存将仅用于执行语句,对相同 SqlSession 的不同查询将不会进行缓存。
</td>
<td>
SESSION | STATEMENT
</td>
<td>
SESSION
</td>
</tr>
<tr>
<td>
jdbcTypeForNull
</td>
<td>
当没有为参数指定特定的 JDBC 类型时,空值的默认 JDBC 类型。
某些数据库驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,比如 NULL、VARCHAR 或 OTHER。
</td>
<td>
JdbcType 常量,常用值:NULL、VARCHAR 或 OTHER。
</td>
<td>
OTHER
</td>
</tr>
<tr>
<td>
lazyLoadTriggerMethods
</td>
<td>
指定对象的哪些方法触发一次延迟加载。
</td>
<td>
用逗号分隔的方法列表。
</td>
<td>
equals,clone,hashCode,toString
</td>
</tr>
<tr>
<td>
defaultScriptingLanguage
</td>
<td>
指定动态 SQL 生成使用的默认脚本语言。
</td>
<td>
一个类型别名或全限定类名。
</td>
<td>
org.apache.ibatis.scripting.xmltags.XMLLanguageDriver
</td>
</tr>
<tr>
<td>
defaultEnumTypeHandler
</td>
<td>
指定 Enum 使用的默认 <code>TypeHandler</code> 。(新增于 3.4.5)
</td>
<td>
一个类型别名或全限定类名。
</td>
<td>
org.apache.ibatis.type.EnumTypeHandler
</td>
</tr>
<tr>
<td>
callSettersOnNulls
</td>
<td>
指定当结果集中值为 null 的时候是否调用映射对象的 setter(map
对象时为 put)方法,这在依赖于 Map.keySet() 或 null
值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。
</td>
<td>
true | false
</td>
<td>
false
</td>
</tr>
<tr>
<td>
returnInstanceForEmptyRow
</td>
<td>
当返回行的所有列都是空时,MyBatis默认返回 <code>null</code>。
当开启这个设置时,MyBatis会返回一个空实例。
请注意,它也适用于嵌套的结果集(如集合或关联)。(新增于 3.4.2)
</td>
<td>
true | false
</td>
<td>
false
</td>
</tr>
<tr>
<td>
logPrefix
</td>
<td>
指定 MyBatis 增加到日志名称的前缀。
</td>
<td>
任何字符串
</td>
<td>
未设置
</td>
</tr>
<tr>
<td>
logImpl
</td>
<td>
指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
</td>
<td>
SLF4J | LOG4J | LOG4J2 | JDK_LOGGING | COMMONS_LOGGING | STDOUT_LOGGING | NO_LOGGING
</td>
<td>
未设置
</td>
</tr>
<tr>
<td>
proxyFactory
</td>
<td>
指定 Mybatis 创建可延迟加载对象所用到的代理工具。
</td>
<td>
CGLIB | JAVASSIST
</td>
<td>
JAVASSIST (MyBatis 3.3 以上)
</td>
</tr>
<tr>
<td>
vfsImpl
</td>
<td>
指定 VFS 的实现
</td>
<td>
自定义 VFS 的实现的类全限定名,以逗号分隔。
</td>
<td>
未设置
</td>
</tr>
<tr>
<td>
useActualParamName
</td>
<td>
允许使用方法签名中的名称作为语句参数名称。
为了使用该特性,你的项目必须采用 Java 8 编译,并且加上 <code>-parameters</code> 选项。(新增于 3.4.1)
</td>
<td>
true | false
</td>
<td>
true
</td>
</tr>
<tr>
<td>
configurationFactory
</td>
<td>
指定一个提供 <code>Configuration</code> 实例的类。
这个被返回的 Configuration 实例用来加载被反序列化对象的延迟加载属性值。
这个类必须包含一个签名为<code>static Configuration getConfiguration()</code> 的方法。(新增于 3.2.3)
</td>
<td>
一个类型别名或完全限定类名。
</td>
<td>
未设置
</td>
</tr>
<tr>
<td>
shrinkWhitespacesInSql
</td>
<td>
Removes extra whitespace characters from the SQL. Note that this also affects literal strings in SQL. (Since 3.5.5)
</td>
<td>
true | false
</td>
<td>
false
</td>
</tr>
</tbody>
</table>
<p>
一个配置完整的 settings 元素的示例如下:
</p>
<source><![CDATA[<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>]]></source>
</subsection>
<subsection name="类型别名(typeAliases)" id="typeAliases">
<p>类型别名可为 Java 类型设置一个缩写名字。
它仅用于 XML 配置,意在降低冗余的全限定类名书写。例如:</p>
<source><![CDATA[<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
]]></source>
<p>当这样配置时,<code>Blog</code> 可以用在任何使用 <code>domain.blog.Blog</code> 的地方。</p>
<p>也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
</p>
<source><![CDATA[<typeAliases>
<package name="domain.blog"/>
</typeAliases>
]]></source>
<p>每一个在包 <code>domain.blog</code> 中的 Java Bean,在没有注解的情况下,会使用
Bean 的首字母小写的非限定类名来作为它的别名。
比如 <code>domain.blog.Author</code> 的别名为
<code>author</code>;若有注解,则别名为其注解值。见下面的例子:</p>
<source><![CDATA[@Alias("author")
public class Author {
...
}
]]></source>
<p>下面是一些为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。</p>
<table>
<thead>
<tr>
<th>
别名
</th>
<th>
映射的类型
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
_byte
</td>
<td>
byte
</td>
</tr>
<tr>
<td>
_long
</td>
<td>
long
</td>
</tr>
<tr>
<td>
_short
</td>
<td>
short
</td>
</tr>
<tr>
<td>
_int
</td>
<td>
int
</td>
</tr>
<tr>
<td>
_integer
</td>
<td>
int
</td>
</tr>
<tr>
<td>
_double
</td>
<td>
double
</td>
</tr>
<tr>
<td>
_float
</td>
<td>
float
</td>
</tr>
<tr>
<td>
_boolean
</td>
<td>
boolean
</td>
</tr>
<tr>
<td>
string
</td>
<td>
String
</td>
</tr>
<tr>
<td>
byte
</td>
<td>
Byte
</td>
</tr>
<tr>
<td>
long
</td>
<td>
Long
</td>
</tr>
<tr>
<td>
short
</td>
<td>
Short
</td>
</tr>
<tr>
<td>
int
</td>
<td>
Integer
</td>
</tr>
<tr>
<td>
integer
</td>
<td>
Integer
</td>
</tr>
<tr>
<td>
double
</td>
<td>
Double
</td>
</tr>
<tr>
<td>
float
</td>
<td>
Float
</td>
</tr>
<tr>
<td>
boolean
</td>
<td>
Boolean
</td>
</tr>
<tr>
<td>
date
</td>
<td>
Date
</td>
</tr>
<tr>
<td>
decimal
</td>
<td>
BigDecimal
</td>
</tr>
<tr>
<td>
bigdecimal
</td>
<td>
BigDecimal
</td>
</tr>
<tr>
<td>
object
</td>
<td>
Object
</td>
</tr>
<tr>
<td>
map
</td>
<td>
Map
</td>
</tr>
<tr>
<td>
hashmap
</td>
<td>
HashMap
</td>
</tr>
<tr>
<td>
list
</td>
<td>
List
</td>
</tr>
<tr>
<td>
arraylist
</td>
<td>
ArrayList
</td>
</tr>
<tr>
<td>
collection
</td>
<td>
Collection
</td>
</tr>
<tr>
<td>
iterator
</td>
<td>
Iterator
</td>
</tr>
</tbody>
</table>
</subsection>
<subsection name="类型处理器(typeHandlers)" id="typeHandlers">
<p>MyBatis 在设置预处理语句(PreparedStatement)中的参数或从结果集中取出一个值时,
都会用类型处理器将获取到的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。</p>
<p>
<span class="label important">提示</span>
从 3.4.5 开始,MyBatis 默认支持 JSR-310(日期和时间 API) 。
</p>
<table>
<thead>
<tr>
<th>
类型处理器
</th>
<th>
Java 类型
</th>
<th>
JDBC 类型
</th>
</tr>
</thead>
<tbody>
<tr>
<td>
<code>BooleanTypeHandler</code>
</td>
<td>
<code>java.lang.Boolean</code>, <code>boolean</code>
</td>
<td>
数据库兼容的 <code>BOOLEAN</code>
</td>
</tr>
<tr>
<td>
<code>ByteTypeHandler</code>
</td>
<td>
<code>java.lang.Byte</code>, <code>byte</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>BYTE</code>
</td>
</tr>
<tr>
<td>
<code>ShortTypeHandler</code>
</td>
<td>
<code>java.lang.Short</code>, <code>short</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>SMALLINT</code>
</td>
</tr>
<tr>
<td>
<code>IntegerTypeHandler</code>
</td>
<td>
<code>java.lang.Integer</code>, <code>int</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>INTEGER</code>
</td>
</tr>
<tr>
<td>
<code>LongTypeHandler</code>
</td>
<td>
<code>java.lang.Long</code>, <code>long</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>BIGINT</code>
</td>
</tr>
<tr>
<td>
<code>FloatTypeHandler</code>
</td>
<td>
<code>java.lang.Float</code>, <code>float</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>FLOAT</code>
</td>
</tr>
<tr>
<td>
<code>DoubleTypeHandler</code>
</td>
<td>
<code>java.lang.Double</code>, <code>double</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>DOUBLE</code>
</td>
</tr>
<tr>
<td>
<code>BigDecimalTypeHandler</code>
</td>
<td>
<code>java.math.BigDecimal</code>
</td>
<td>
数据库兼容的 <code>NUMERIC</code> 或 <code>DECIMAL</code>
</td>
</tr>
<tr>
<td>
<code>StringTypeHandler</code>
</td>
<td>
<code>java.lang.String</code>
</td>
<td>
<code>CHAR</code>, <code>VARCHAR</code>
</td>
</tr>
<tr>
<td>
<code>ClobReaderTypeHandler</code>
</td>
<td>
<code>java.io.Reader</code>
</td>
<td>
-
</td>
</tr>
<tr>
<td>
<code>ClobTypeHandler</code>