Configuration就像是Mybatis的总管,Mybatis的全部配置信息都存放在这里,此外,它还提供了设置这些配置信息的方法。 Configuration能够从配置文件里获取属性值,也能够经过程序直接设置。Configuration里可供配置的属性有:html
1. properties属性java
1) 配置示例spring
2) 用途sql
properties里配置的属性将被存放在Configuration的variables变量里,供Mybatis使用。此外在配置文件中,也可使用这些属性,用来对配置项实现动态配置。好比:数据库
3) 注意事项缓存
resource里也可指定属性值,而且resource里属性值的优先级高于property子节点里配置的值,也就是说resource的同名属性将会覆盖于property子节点里的值。tomcat
2. settings设置服务器
1) 配置示例mybatis
2) 用途app
setting节点里配置的值会直接改写Configuration对应的变量值,这些变量描述的是Mybatis的全局运行方式,若是对这些属性的含义不熟悉的话建议不要配置,使用默认值便可。下面这个表格描述了各个配置项的含义和默认值:
设置参数 |
描述 |
有效值 |
默认值 |
cacheEnabled |
这个配置使全局的映射器启用或禁用缓存。 |
true | false |
true |
lazyLoadingEnabled |
全局启用或禁用延迟加载。当禁用时,全部关联对象都会即时加载。 |
true | false |
true |
aggressiveLazyLoading |
当启用时,有延迟加载属性的对象在被调用时将会彻底加载任意属性。不然,每种属性将会按须要加载。 |
true | false |
true |
multipleResultSetsEnabled |
容许或不容许多种结果集从一个单独的语句中返回(须要适合的驱动)。 |
true | false |
true |
useColumnLabel |
使用列标签代替列名。不一样的驱动在这方便表现不一样。参考驱动文档或充分测试两种方法来决定所使用的驱动。 |
true | false |
true |
useGeneratedKeys |
容许JDBC支持生成的键。须要适合的驱动。若是设置为true则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(好比Derby)。 |
true | false |
false |
autoMappingBehavior |
指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。FULL会自动映射任意复杂的结果(嵌套的或其余状况)。 |
NONE, PARTIAL, FULL |
PARTIAL |
3) 注意事项
谨慎修改这些配置值。
3. typeAliases类型命名
1) 配置示例
2) 用途
别名是为Java类型命名一个短的名字。它只用在XML配置文件里,用来减小类彻底限定名的多余部分。例如在配置文件里须要使用domain.blog.Author的地方能够简单的使用Author替换。
3) 注意事项
Mybatis里有一些默认的别名,不要覆盖这些别名:
别名 |
映射的类型 |
_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 |
4. typeHandlers类型处理器
1) 配置示例
2) 用途
不管是MyBatis在预处理语句中设置一个参数,仍是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。
3) 注意事项
Mybatis已经有了若干个类型处理器了,编写本身的类型处理器时勿从新发明轮子。
类型处理器 |
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-任何兼容的字符串类型,做为代码存储(而不是索引) |
5. objectFactory对象工厂
略(不经常使用)
6. plugins插件
1) 配置示例
2) 用途
插件能够改变某些类的执行, MyBatis容许被插件来拦截的类有:
3) 注意事项
插件能够改变MyBatis底层的行为,所以功能很是强大。但在对MyBatis深刻理解前不要急着编写本身的插件,由于若插件编写不当,将致使整个MyBatis都不能正常工做。本系列的后面会有专门的章节介绍插件机制以及两个有用的插件,欢迎持续关注。
7. environments环境
environments里能够配置多个environment,每一个environment对应一个数据库环境。一个完整的定义以下:
environments里的default属性表示默认的数据库环境,与某个environment的id相对应。
1) environment环境变量
environment经过id属性与其余数据库环境区别。它有两个子节点:
a) transactionManager事务管理器
在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
l JDBC–这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源获得的链接来管理事务范围。
l MANAGED–这个配置几乎没作什么。它历来不提交或回滚一个链接。而它会让容器来管理事务的整个生命周期(好比Spring或JEE应用服务器的上下文)
b) dataSource数据源
在MyBatis中有三种数据源类型(也就是type=”[UNPOOLED | POOLED| JNDI]”):
l UNPOOLED –这个数据源的实现是每次被请求时简单打开和关闭链接,须要配置的属性:
driver – 这是JDBC驱动的Java类的彻底限定名
url – 这是数据库的JDBC URL地址。
username – 登陆数据库的用户名。
password – 登陆数据库的密码。
defaultTransactionIsolationLevel – 默认的链接事务隔离级别。
l POOLED –mybatis实现的简单的数据库链接池类型,它使得数据库链接可被复用,没必要在每次请求时都去建立一个物理的链接。
l JNDI – 经过jndi从tomcat之类的容器里获取数据源。
8. mapper映射器
1) 配置示例
2) 用途
Mappers用于告诉Mybatis去哪里寻找sql映射文件。sql映射文件是Mybatis最灵活的地方。sql映射文件在后续的章节里会进一步详细描述,欢迎持续关注。
前面介绍了Configuration的各个属性以及在文件里配置他们的方法。这一节介绍如何从文件里解析这些配置项以及简化配置的方法。 Configuration在SqlSessionFactoryBuilder建立SqlSessionFactory时建立,经过 XMLConfigBuilder的parse方法建立。下面一个个的介绍:
1. properties属性
经过XMLConfigBuilder的propertiesElement方法解析,解析后的结果存放在Configuration的variables变量里。解析顺序,先解析子节点里的属性值,再解析resource属性指定的配置文件里的值。后者会覆盖前者的值。
2. settings设置
经过XMLConfigBuilder的settingsElement方法解析,解析前校验属性是不是可配置的,只要有一个不可配置,整个mybatis就会异常退出,因此配置这些属性务必当心。
3. typeAliases类型命名
经过XMLConfigBuilder的typeAliasesElement方法解析,在该方法内部调用TypeAliasRegistry的registerAlias方法完成注册,并将注册的别名存入本地缓存中。XMLConfigBuilder调用的registerAlias方法并无什么特别的地方,但TypeAliasRegistry却提供了批量注册别名的方法,该方法只须要一个包名参数。该方法会在指定的包路径下扫描可注册的类(接口和内部类除外),并以类的简单名为key完整名为value注册别名。这个方法极大的简化了配置,后续章节将要介绍的spring与mybatis的整合模块里就使用了这个方法使得配置量大大减小。
4. typeHandlers类型处理器
经过XMLConfigBuilder的typeHandlerElement方法解析,在该方法内部调用TypeHandlerRegistry的register方法完成注册,并将注册的类型处理器存入本地缓存中。同typeAliases同样,TypeHandlerRegistry也提供了批量注册的方法,该方法一样只须要一个包名参数。该方法会在指定的包路径下扫描可注册的类(接口、抽象类和内部类除外),不过只注册那些配置了MappedTypes注解的类。这个方法极大的简化了配置,后续章节将要介绍的spring与mybatis的整合模块里就使用了这个方法使得配置量大大减小。
5. objectFactory对象工厂
略(不经常使用)
6. plugins插件
经过XMLConfigBuilder的pluginElement方法解析,在该方法内部实例化插件对象后存入Configuration的interceptorChain变量里。
7. environments环境
经过XMLConfigBuilder的environmentsElement方 法解析,在该方法内,先判断默认是否指定了环境ID,没有的话就使用默认的环境ID吗,而后在各个环境里取ID对应的项。也就是说一个 Configuration只会保存一个数据库环境,若是要配置多数据库环境的话须要建立多个Configuration对象。在改方法内先解析事务工 厂、再解析数据源、而后再解析数据库环境,在解析数据库环境的过程当中会访问一次数据库,以取得数据库类型信息。
8. mapper映射器
经过XMLConfigBuilder的mapperElement方法解析,在该方法内部经过调用XMLMapperBuilder的parse方法完成。