深入Mybatis配置文件
Configuration是干嘛的
Configuration就像是Mybatis的总管,Mybatis的所有配置信息都存放在这里,此外,它还提供了设置这些配置信息的方法。Configuration可以从配置文件里获取属性值,也可以通过程序直接设置。Configuration里可供配置的属性有:
1. properties属性
1) 配置示例
2) 用途
properties里配置的属性将被存放在Configuration的variables变量里,供Mybatis使用。此外在配置文件中,也可以使用这些属性,用来对配置项实现动态配置。比如:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
3) 注意事项
resource里也可指定属性值,并且resource里属性值的优先级高于property子节点里配置的值,也就是说resource的同名属性将会覆盖于property子节点里的值。
2. settings设置
1) 配置示例
<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="enhancementEnabled" value="false"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25000"/>
</settings>
2) 用途
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) 配置示例
<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>
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允许被插件来拦截的类有:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
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的各个属性以及在文件里配置他们的方法。这一节介绍如何从文件里解析这些配置项以及简化配置的方法。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方法完成。
深入Mybatis配置文件的更多相关文章
- MyBatis学习(四)、MyBatis配置文件
四.MyBatis主配置文件 在定义sqlSessionFactory时需要指定MyBatis主配置文件: <bean id="sqlSessionFactory" clas ...
- MyBatis配置文件解析
MyBatis配置文件解析(概要) 1.configuration:根元素 1.1 properties:定义配置外在化 1.2 settings:一些全局性的配置 1.3 typeAliases:为 ...
- MyBatis学习 之 四、MyBatis配置文件
目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...
- 【转】MyBatis学习总结(三)——优化MyBatis配置文件中的配置
[转]MyBatis学习总结(三)——优化MyBatis配置文件中的配置 一.连接数据库的配置单独放在一个properties文件中 之前,我们是直接将数据库的连接配置信息写在了MyBatis的con ...
- MyBatis的学习总结三:优化MyBatis配置文件中的配置
一.优化Mybatis配置文件conf.xml中数据库的信息 1.添加properties的配置文件,存放数据库的信息:mysql.properties具体代码: driver=com.mysql.j ...
- spring(一)--spring/springmvc/spring+hibernate(mybatis)配置文件
这篇文章用来总结一下spring,springmvc,spring+mybatis,spring+hibernate的配置文件 1.web.xml 要使用spring,必须在web.xml中定义分发器 ...
- 详解mybatis配置文件
在前面两篇文章中,大致与大家分享了基于Java的ORM框架,Mybatis基本架构和Mybatis实现CRUD的基本原理与流程,在本篇文章中,继续与大家分享Mybatis配置文件. 通过研究Mybat ...
- springmvc 项目完整示例04 整合mybatis mybatis所需要的jar包 mybatis配置文件 sql语句 mybatis应用
百度百科: MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBat ...
- mybatis 配置文件全解
目录 properties settings typeAliases mappers properties mybatis配置文件中,可以像代码一样定义变量,然后在配置文件的其他地方使用,比如数据库连 ...
- mybatis配置文件resultMap标签的使用
本文为博主原创,未经允许不得转载: resultMap标签是为了映射select查询出来结果的集合,其主要作用是将实体类中的字段与 数据库表中的字段进行关联映射. 注意:当实体类中的字段与数据库表中的 ...
随机推荐
- cocos2dx3.2 学习笔记(2)--ActionManagerTest
前面看完了 CppTests的基本框架及流程.如今准备看看详细的每一个Test了 从哪里開始看呢. 额,就第一个吧(ActionManagerTest) 首先看看效果吧,执行了下.发现有几种效果.看不 ...
- adb的经常使用命令(android debud bridge)
android调试桥: adb命令使用须要在系统环境遍历中path中追加adb.exe的完整路径D:\IDE\adt-bundle-windows-x86-20130729\sdk\platform- ...
- Linux系统目录数和文件数限制
对于系统管理员来说,了解系统的一些限制是非常有必要的,这样可以根据需要进行必要的参数配置和调整,进而实现更优的性能,对于系统设计人员甚至程序员来说,了解系统的一些限制,也会有助于设计更为合理的存储结构 ...
- 封装EF code first用存储过程的分页方法
一年半没有做过MVC的项目了,还是很怀念(因为现在项目还是原来的ASPX),个人还是喜欢mvc,最近又开始重拾MVC,感觉既熟悉又陌生. 记录一下封装好的分页代码 首先先说下 我使用EF codefi ...
- CentOS 安装和配置 Mantis
Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务.在功能上.实用性上足以满足中小型项目的管理及跟踪.更重要的是其开源,不需要负担任何费用. 1. ...
- MySQL 创建自定义函数(1)
1. 创建测试自定义函数(1) CREATE DEFINER=`dbdh`@`localhost` FUNCTION `test`.`sp_function_dbdh_three`() RETURNS ...
- 多用GCD,少用performSelect系列方法
例如,要延后执行某项任务,可以有下面两种实现方式,而我们应该优先考虑第二种: // Using performSelect: withObject: afterDelay: [self perform ...
- poj 2154 Color < 组合数学+数论>
链接:http://poj.org/problem?id=2154 题意:给出两个整数 N 和 P,表示 N 个珠子,N种颜色,要求不同的项链数, 结果 %p ~ 思路: 利用polya定理解~定理内 ...
- arm处理器的历史及现状
1 arm处理器的发展历史 arm1 arm2 arm3 arm6 arm7 arm9 arm11 arm cortex 2 arm处理器现状 arm cortex A a即application,即 ...
- Qt笔记之使用设计器自定义窗口标题栏
1.在窗口显示之前,设置WindowFlags为FramelessWindowHint,以产生一个没有边界的窗口 例如 Widget::Widget(QWidget *parent) : QWidge ...