一、properties
properties
标签可以用于引入外部的配置文件,也可以用于定义全局变量。
比如我们在配置数据源的时候习惯把相关的信息单独的放在一个配置文件中,方便修改。
数据库配置信息dbconfig.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis-study
jdbc.username=root
jdbc.password=1234
在全局配置文件mybatis-config.xml
中通过使用properties
标签引用dbconfig.properties
<configuration>
<!--
properties 中提供了两个属性,分别是resource 和url
resource用于引入类路径下的资源
url 用于引入磁盘或者网络路径中的资源
-->
<properties resource="dbconfig.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<!-- 配置数据源 通过${} 的方式获得外部变量的值 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
</configuration>
二、settings
settings
标签用于改变 MyBatis 的运行时行为。
部分配置实例如下:
<settings>
<!-- 配置影响的所有映射器中配置的缓存的全局开关,默认是true -->
<setting name="cacheEnabled" value="true"/>
<!-- 懒加载的全局开关,默认是false -->
<setting name="lazyLoadingEnabled" value="true"/>
<!--
是否开启驼峰命名规则映射,默认是false
比如数据库某个字段为user_name,设置为true,可以映射到javabean 中的userName字段
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
三、typeAliases
typeAliases
可以为javabean 起别名。
比如我们在SQL 映射文件中写SQL 语句时,返回的结果类型可能是某个javabean 类型,这时候为了方便,我们就可以为这个javabean 设置一个简单的别名。注意配置的顺序,typeAliases
要配置在settings
后面。
<typeAliases>
<!-- typeAlias 为某个javabean 起别名,type 为对应的全路径名,alias 为设置到额别名,不设置alias 默认是类名小写 -->
<!--<typeAlias type="com.jas.mybatis.bean.Employee" alias="employee"/>-->
<!-- 批量起别名,那么为javabean 所在的包,默认的别名是类名小写 -->
<package name="com.jas.mybatis.bean"/>
</typeAliases>
SQL 映射文件
<!-- 设置了别名以后,resultType 返回值类型就可以使用别名了 -->
<select id="getEmpById" resultType="Employee">
select * from t_employee where id = #{id}
</select>
四、typeHandlers
typeHandlers
类型处理器,不管MyBatis 在预处理语句(PreparedStatement
)中设置一个参数,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
比如数据库中的VARCHAR
类型,会被转换成Java 中的java.lang.String
,其类型处理器是StringTypeHandler
。这个标签通常不必设置,MyBatis 对大部分常用的数据类型都进行了转换。
五、objectFactory
MyBatis 每次创建结果对象的新实例时,都会使用一个对象工厂(ObjectFactory
)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。这个标签一般不需要作其他配置。
六、plugins
MyBatis 允许你对已经映射的SQL 语句在执行过程中可以对某一点进行拦截调用。默认情况下,MyBatis 允许使用插件来拦截的方法调用主要有四个:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed)
ParameterHandler (getParameterObject, setParameters)
ResultSetHandler (handleResultSets, handleOutputParameters)
StatementHandler (prepare, parameterize, batch, update, query)
这些方法的使用会在后续的报文中会作具体的介绍,有兴趣的话可以关注后续的博文。
七、environments
environments
允许配置成多种运行环境,比如开发、测试和生产环境,可以在不同的生产环境中分别配置对应的数据库。这种机制有助于将 SQL 映射应用于多种数据库之中。
比如可以在environments
中设置两个环境,分别是test 和development。在不同的环境下,可以通过default
来指定。
<environments default="development">
<!-- 生产环境 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!-- 测试环境 -->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- ...省略一些信息... -->
</dataSource>
</environment>
</environments>
environments
下可以设置多个environment
,每个environment
都必须要有transactionManager
和dataSource
,否则会报错。
八、databaseIdProvider
设置databaseIdProvider
可以让MyBatis 支持不同厂商的数据库,对于多数据库厂商的支持基于SQL 映射文件中的databaseId
字段。
比如设置MyBatis 支持三种数据库厂商,需要做如下配置:
<databaseIdProvider type="DB_VENDOR">
<!-- name 表示数据库厂商的标识,value 表示数据库厂商标识的别名 -->
<property name="SQL Server" value="sqlserver"/>
<property name="MySql" value="mysql"/>
<property name="Oracle" value="oracle" />
</databaseIdProvider>
在SQL 映射文件中编写SQL 的时候可以通过databaseId
字段设置使用的是哪个厂商的数据库。当然如果你要在不同数据库厂商之间进行切换,都需要配置相对应的数据源。
<mapper namespace="com.jas.mybatis.mapper.EmployeeMapper">
<!-- databaseId="mysql" 表示使用的是MySql ,"mysql" 是上面设置的MySql 的别名 -->
<select id="getEmpById" resultType="Employee" databaseId="mysql">
select * from t_employee where id = #{id}
</select>
</mapper>
九、mappers
mappers
用于在全局配置文件中注册SQL 映射文件。mapper
标签中提供了三个属性resource
、url
和class
。
resource
加载类路径下的SQL映射文件,
url
加载磁盘中或者网络中的映射文件,
class
用于注册接口。
配置规则如下:
<!-- resource="EmployeeMapper.xml" 表示映射文件在类路径下 -->
<mappers>
<mapper resource="EmployeeMapper.xml"/>
</mappers>
十、总结
这些标签的使用顺序是一定的,打乱定义的顺序会报错。
properties -> settings -> typeAliases -> typeHandlers -> objectFactory -> objectWrapperFactory ->
reflectorFactory -> plugins -> environments -> databaseIdProvider -> mappers
这篇博文主要介绍了MyBatis 全局配置文件中一些标签,关于这些标签,只是将其中一些相对重要的用法作了介绍,并没有把标签的全部用法列出来。如果你想更全面了解这些标签的用法,官方文档是一个不可错过的选择。
官方文档链接:http://www.mybatis.org/mybatis-3/zh/configuration.html