Java的MyBatis框架中关键的XML字段映射的配置参数详解
properties
这些是外部化的,可替代的属性,这些属性也可以配置在典型的Java属性配置文件中,或者通过properties元素的子元素来传递。例如:
<properties resource="org/mybatis/example/config.properties"> <property name="username" value="dev_user"/> <property name="password" value="F2Fa3!33TYyg"/> </properties>
其中的属性就可以在整个配置文件中使用,使用可替换的属性来实现动态配置。比如:
<dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource>
这个例子中的username和password将会由properties元素中设置的值来替换。driver和url属性将会从包含进来的config.properties文件中的值来替换。
Settings
1.cacheEnabled
这个配置使全局的映射器启用或禁用缓存。
有效值:true,false
默认值:true
2.lazyLoadingEnabled
全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。
有效值:true,false
默认值:true
3.aggressiveLazyLoading
当启用时,有延迟加载属性的对象在被调用时将会完全加载任意属性。否则,
每种属性将会按需要加载。
有效值:true,false
默认值:true
4.mult ipleResultSetsEnabled
允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)
有效值:true,false
默认值:true
5.useColumnLabel
使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测
试两种方法来决定所使用的驱动。
有效值:true,false
默认值:true
6.useGeneratedKeys
允许JDBC支持生成的键。需要适合的驱动。如果设置为true则这个设置强制
生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如 Derby)
有效值:true,false
默认值:false
7.autoMappingBehavior
指定MyBatis如何自动映射列到字段/属性。PARTIAL只会自动映射简单,没有嵌套的结果。
FULL会自动映射任意复杂的结果(嵌套的或其他情况)
有效值:NONE,PARTIAL,FULL
默认值:PARTIAL
8.defaultExecutorType
配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE执行器重用预处理语句。
BATCH 执行器重用语句和批量更新
有效值:SIMPLE,REUSE,BATCH
默认值:SIMPLE
9.defaultStatementTimeout
设置超时时间,它决定驱动等待一个数据库响应的时间。
有效值:Any,positive,integer
默认值:Not Set(null)
一个设置信息元素的示例,完全的配置如下所示:
<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>
typeAliases
类型别名是为Java类型命名一个短的名字。它只和XML配置有关,只用来减少类完全限定名的多余部分。例如:
<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>
使用这个配置,“Blog”可以任意用来替代“domain.blog.Blog”所使用的地方。 对于普通的 Java 类型,有许多内建的类型别名。它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。
typeHandlers
无论是MyBatis在预处理语句中设置一个参数,还是从结果集中取出一个值时,类型处理器被用来将获取的值以合适的方式转换成Java类型。下面这个表格描述了默认的类型处理器。
你可以重写类型处理器或创建你自己的类型处理器来处理不支持的或非标准的类型。但这种情况相当少!!
objectFactory
MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。如果你想重写默认的ObjectFactory,你可以创建你自己的。实例略。
plugins
MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:
1.Executor
(update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
2.ParameterHandler
(getParameterObject, setParameters)
3.ResultSetHandler
(handleResultSets, handleOutputParameters)
4.StatementHandler
(prepare, parameterize, batch, update, query)
environments
MyBatis可以配置多种环境。这会帮助你将SQL映射应用于多种数据库之中。
一个很重要的问题要记得:你可以配置多种环境,但你只能为每个SqlSessionFactory实例选择一个。所以,如果你想连接两个数据库,你需要创建两个SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。
环境元素定义了如何配置环境,如例:
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"> <property name="..." value="..."/> </transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
注意这里:
1.默认的环境 ID(比如:default=”development”)。
2.每个 environment 元素定义的环境 ID(比如:id=”development”)。
3.事务管理器的配置(比如:type=”JDBC”)。
4.数据源的配置(比如:type=”POOLED”)。
transactionManager
在MyBatis中有两种事务管理器类型(也就是type="[JDBC|MANAGED]"。
1.JDBC---这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED---这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。例如:
<transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换它们,你需要放置你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。