具体请参见http://www.mybatis.org/mybatis-3/zh/configuration.html html
MyBatis配置文件中大标签configuration下子标签包括: java
configuration mysql
|--- properties sql
|--- settings 数据库
|--- typeAliases apache
|--- typeHandlers mybatis
|--- objectFactory app
|--- plugins ide
|--- environments 函数
|--- |--- environment
|--- |--- |--- transactionManager
|--- |--- |__ dataSource
|__ mappers
properties和java的.properties的配置文件有关。配置properties的resource指定.properties的路径,而后再在properties标签下配置property的name和value,则能够替换.properties文件中相应属性值。
这是MyBatis 修改操做运行过程细节的重要的步骤。下方这个表格描述了这些设置项、含义和默认值。
设置项 |
描述 |
容许值 |
默认值 |
cacheEnabled |
对在此配置文件下的全部cache 进行全局性开/关设置。 |
true | false |
true |
lazyLoadingEnabled |
全局性设置懒加载。若是设为‘false’,则全部相关联的都会被初始化加载。 |
true | false |
true |
aggressiveLazyLoading |
当设置为‘true’的时候,懒加载的对象可能被任何懒属性所有加载。不然,每一个属性都按需加载。 |
true | false |
true |
multipleResultSetsEnabled |
容许和不容许单条语句返回多个数据集(取决于驱动需求) |
true | false |
true |
useColumnLabel |
使用列标签代替列名称。不一样的驱动器有不一样的做法。参考一下驱动器文档,或者用这两个不一样的选项进行测试一下。 |
true | false |
true |
useGeneratedKeys |
容许JDBC 生成主键。须要驱动器支持。若是设为了true,这个设置将强制使用被生成的主键,有一些驱动器不兼容不过仍然能够执行。 |
true | false |
false |
autoMappingBehavior |
指定MyBatis 是否而且如何来自动映射数据表字段与对象的属性。PARTIAL将只自动映射简单的,没有嵌套的结果。FULL 将自动映射全部复杂的结果。 |
NONE, PARTIAL, FULL |
PARTIAL |
defaultExecutorType |
配置和设定执行器,SIMPLE 执行器执行其它语句。REUSE 执行器可能重复使用prepared statements 语句,BATCH执行器能够重复执行语句和批量更新。 |
SIMPLE REUSE BATCH |
SIMPLE |
defaultStatementTimeout |
设置一个时限,以决定让驱动器等待数据库回应的多长时间为超时 |
正整数 |
Not Set (null) |
例如:
类型别名是Java 类型的简称。
它仅仅只是关联到XML 配置,简写冗长的JAVA 类名。例如:
使用这个配置,“StudentEntity”就能在任何地方代替“com.manager.data.model.StudentEntity”被使用。
对于普通的Java类型,有许多内建的类型别名。它们都是大小写不敏感的,因为重载的名字,要注意原生类型的特殊处理。
别名 |
映射的类型 |
_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 |
不管是MyBatis在预处理语句中设置一个参数,仍是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。下面这个表格描述了默认的类型处理器。
类型处理器 |
Java类型 |
JDBC类型 |
BooleanTypeHandler |
Boolean,boolean |
任何兼容的布尔值 |
ByteTypeHandler |
Byte,byte |
任何兼容的数字或字节类型 |
ShortTypeHandler |
Short,short |
任何兼容的数字或短整型 |
IntegerTypeHandler |
Integer,int |
任何兼容的数字和整型 |
LongTypeHandler |
Long,long |
任何兼容的数字或长整型 |
FloatTypeHandler |
Float,float |
任何兼容的数字或单精度浮点型 |
DoubleTypeHandler |
Double,double |
任何兼容的数字或双精度浮点型 |
BigDecimalTypeHandler |
BigDecimal |
任何兼容的数字或十进制小数类型 |
StringTypeHandler |
String |
CHAR和VARCHAR类型 |
ClobTypeHandler |
String |
CLOB和LONGVARCHAR类型 |
NStringTypeHandler |
String |
NVARCHAR和NCHAR类型 |
NClobTypeHandler |
String |
NCLOB类型 |
ByteArrayTypeHandler |
byte[] |
任何兼容的字节流类型 |
BlobTypeHandler |
byte[] |
BLOB和LONGVARBINARY类型 |
DateTypeHandler |
Date(java.util) |
TIMESTAMP类型 |
DateOnlyTypeHandler |
Date(java.util) |
DATE类型 |
TimeOnlyTypeHandler |
Date(java.util) |
TIME类型 |
SqlTimestampTypeHandler |
Timestamp(java.sql) |
TIMESTAMP类型 |
SqlDateTypeHandler |
Date(java.sql) |
DATE类型 |
SqlTimeTypeHandler |
Time(java.sql) |
TIME类型 |
ObjectTypeHandler |
Any |
其余或未指定类型 |
EnumTypeHandler |
Enumeration类型 |
VARCHAR-任何兼容的字符串类型,做为代码存储(而不是索引)。 |
你能够重写类型处理器或建立你本身的类型处理器来处理不支持的或非标准的类型。要这样作的话,简单实现TypeHandler接口(org.mybatis.type),而后映射新的类型处理器类到Java类型,还有可选的一个JDBC类型。而后再typeHandlers中添加这个类型处理器。
新定义的类型处理器将会覆盖已经存在的处理Java的String类型属性和VARCHAR参数及结果的类型处理器。要注意MyBatis不会审视数据库元信息来决定使用哪一种类型,因此你必须在参数和结果映射中指定那是VARCHAR类型的字段,来绑定到正确的类型处理器上。这是由于MyBatis直到语句被执行都不知道数据类型的这个现实致使的。
在配置文件的typeHandlers中添加typeHandler标签。
每次MyBatis 为结果对象建立一个新实例,都会用到ObjectFactory。默认的ObjectFactory 与使用目标类的构造函数建立一个实例毫无区别,若是有已经映射的参数,那也可能使用带参数的构造函数。
若是你重写ObjectFactory 的默认操做,你能够经过继承org.apache.ibatis.reflection.factory.DefaultObjectFactory建立一下你本身的。
ObjectFactory接口很简单。它包含两个建立用的方法,一个是处理默认构造方法的,另一个是处理带参数构造方法的。最终,setProperties方法能够被用来配置ObjectFactory。在初始化你的ObjectFactory实例后,objectFactory元素体中定义的属性会被传递给setProperties方法。
配置文件中添加objectFactory标签
MyBatis容许你在某一点拦截已映射语句执行的调用。默认状况下,MyBatis容许使用插件来拦截方法调用:
这些类中方法的详情能够经过查看每一个方法的签名来发现,并且它们的源代码在MyBatis的发行包中有。你应该理解你覆盖方法的行为,假设你所作的要比监视调用要多。若是你尝试修改或覆盖一个给定的方法,你可能会打破MyBatis的核心。这是低层次的类和方法,要谨慎使用插件。
使用插件是它们提供的很是简单的力量。简单实现拦截器接口,要肯定你想拦截的指定签名。
MyBatis 能够配置多个环境。这能够帮助你SQL 映射对应多种数据库等。
这里是告诉MyBatis 去哪寻找映射SQL 的语句。能够使用类路径中的资源引用,或者使用字符,输入确切的URL 引用。
例如: