XML 配置文件
configuration 标签的子标签顺序是固定的:
1.properties
2.settings
3.typeAliases
4.typeHandlers
5.objectFactory
6.objectWrapperFactory
7.reflectorFactory
8.plugins
9.environments
10.databaseIdProvider
11.mappers
1. properties 标签
可以将连接数据库的配置单独放在 properties 文件中,然后在 mybatis-config.xml 中通过
properties
标签来引入。
例如:
<properties resource="db.properties"/>
其中 properties
标签的 resource
属性是引入类路径下的资源,而 url
是引入网络资源或者磁盘路径下的资源。
然后在通过${}
来替换需要动态配置的属性值。例如:
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
2. typeAliases 标签
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。不区分大小写。
例如:
<typeAliases>
<typeAlias type="com.chen.entity.User" alias="user"/>
</typeAliases>
这样,当使用com.chen.entity.User
时候可以通过user
替换。
也可以通过package
指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,比如:
<typeAliases>
<package name="com.chen.entity"/>
</typeAliases>
每一个在包 com.chen.entity
中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 com.chen.entity.User
的别名为 user
;若有注解,则别名为其注解值。例如
@Alias("user")
public class User {
//...
}
MyBatis 已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。在 http://www.mybatis.org/mybatis-3/zh/configuration.html#typeAliases 中有具体描述。
3. settings 标签
settings 标签是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
部分设置如下表:
设置参数 | 描述 | 有效值 | 默认值 |
---|---|---|---|
cacheEnabled | 该配置影响的所有映射器中配置的缓存的全局开关。 | true | false | true |
useColumnLabel | 使用列标签代替列名。不同的驱动在这方面会有不同的表现, 具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。 | true | false | true |
autoMappingBehavior | 指定 MyBatis 应如何自动映射列到字段或属性。 NONE 表示取消自动映射;PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。 FULL 会自动映射任意复杂的结果集(无论是否嵌套)。 | NONE, PARTIAL, FULL | PARTIAL |
mapUnderscoreToCamelCase | 是否开启自动驼峰命名规则(camel case)映射,即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。 | true | false | False |
defaultStatementTimeout | 设置超时时间,它决定驱动等待数据库响应的秒数。 | 任意正整数 | Not Set (null) |
实例如下:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
4. typeHandlers 标签
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
NOTE Since version 3.4.5, The MyBatis has been supported JSR-310(Date and Time API) by default.
5. environments
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中。
- environments :mybatis 可以配置多种环境,default 指定使用哪种环境
- environment :配置具体环境信息,必须有两个标签;id 表示该环境唯一标识
- transactionManager :事务管理器
- type
- JDBC(JdbcTransactionFactory) :这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
- MANAGED(ManagedTransactionFactory) : 这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
- 自定义事务管理器:实现 TransactionFactory 接口。type 指定为全类名
- dataSource :dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。
- type
- UNPOOLED(UnpooledDataSourceFactory) :这个数据源的实现只是每次被请求时打开和关闭连接。
- POOLED(PooledDataSourceFactory) :这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间。
- JNDI(JndiDataSourceFactory) :这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。
- 自定义数据源 :实现 DataSourceFactory 接口。type 指定为全类名
6. databaseIdProvider
MyBatis 可以根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId
属性。
例如:
<databaseIdProvider type="DB_VENDOR">
<property name="SQL Server" value="sqlserver"/>
<property name="DB2" value="db2"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
- databaseIdProvider
- type
- DB_VENDOR:使用MyBatis提供的 VendorDatabaseIdProvider 解析数据库厂商标识。也可以实现 DatabaseIdProvider 接口来自定义。
- property
- name :数据库厂商标识
- value :为标识起一个别名,方便SQL语句使用 databaseId 属性引用
7. mappers
将 sql 映射注册到全局配置中
- mappers
- mapper :注册一个 sql 映射
- url :引用网络路径或磁盘路径下的 sql 映射文件
- resource :引用类路径下的 sql 映射文件
- class : 引用接口
- 有 sql 映射文件,映射文件必须和接口同名,并且放在接口同一目录下
- 没有 sql 映射文件,所有的 sql 通过注解写在接口上
- package :通过包名来寻找 sql 映射文件