MyBatis配置结构
MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。 配置文档的顶层结构如下:
- configuration(配置)
- properties(属性)
- setting(设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境配置)
- environment(环境变量)
- transactionManager(事务管理器)
- dataSource(数据源)
- environment(环境变量)
- databaseIdProvider(数据库厂商标识)
- mappers(映射器)
属性(properties)
这些属性都是可外部配置且可动态替换的,既可以在典型的 Java 属性文件中配置,亦可通过 properties 元素的子元素来传递。例如:
<properties resource="db-config.properties"/>
这样就可以在db-config.properties文件中配置数据库信息,然后一参数的形式在mybatis.xml文件中调用,例如:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
设置(setting)
类型别名(typeAliases)
这个属性就是在注册实体类给实体类的全限定性类名起个别名(类似于小名),因为在写mapper文件的时候,需要配置实体类的全限定名,如果全限定名很长,那就很痛苦,此时就可以使用这个属性给你的类起个小名了,例如:
<typeAliases>
<typeAlias type="com.kons.dao.User"/>
</typeAliases>
当然,项目不可能只有一个实体类,那样子还是要给所有的实体类起小名,也是很麻烦,MyBatis当然考虑这个问题了,此时可以使用package属性指定一个包名,例如:
<typeAliases>
<package name="com.kons.dao"/>
</typeAliases>
默认情况下,会将com.kons.dao包下的类名首字母小写作为别名,例如:com.kons.dao.User的别名就是user。
另外还有注解配置别名的方法等。
类型处理器(typeHandlers)
对象工厂(objectFactory)
插件(plugins)
环境配置(environments)
配置MyBatis的运行环境
- 运行环境的切换
工作的项目不止一个环境,什么测试环境啊,正式环境什么的,往往要配置好几个数据库配置。此时就可以在environments里配置多个environment,如下:
<environments default="development">
<!--开发环境-->
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<!--测试环境-->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${test_url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
切换环境的时候,只要修改environments中default属性就可以了。
-
transactionManager标签
该标签用于指定MyBatis所使用的事务管理器。 MyBatis 支持两种事务管理器类型:-
JDBC
该事务器就是我们之前通过Connection的commit()方法提交,通过rollback()方法回滚,默认是需要手动提交的。 -
MANAGED
由容器来管理事务的整个事务的生命周期,默认情况下会关闭连接,将来学习spring框架之后,就不用在配置事务管理器了,spring会使用自带的管理器。
-
JDBC
-
dataSource标签
该项主要用于配置数据源和数据库连接基本属性,有以下三种内建的数据源类型:-
UNPOOLED
该配置表示不使用连接池,每次请求都会创建一个数据库连接,使用完毕后再关闭。当项目对数据库性能要求不大的时候,可以使用该配置。 -
POOLED
改配置表示使用mybatis自带的数据库连接池,可以在dataSource下的property属性中设置数据库连接池的基本信息,该部分可以在mybatis的官网中看到。 -
JNDI
配置外部数据源
-
UNPOOLED
数据库厂商标识(databaseIdProvider)
映射器(mappers)
这个属性就是告诉mybatis去哪里找sql语句,有四种方式:
- 使用相对于类路径的资源引用
<mappers>
<mapper resource="mapper/user.xml"/>
</mappers>
- 使用完全限定资源定位符
<mappers>
<mapper resource="file:///mapper/user.xml"/>
</mappers>
- 使用映射器接口实现类的完全限定类名
该方式的使用,需要满足以下几个要求:
(1)映射文件名要与 Dao 接口名称相同
(2)映射文件要与接口在同一包中
(3)映射文件中的 namespace 属性值为 Dao 接口的全类名
<mappers>
<mapper class="com.kons.dao.userMapper"/>
</mappers>
- 将包内的映射器接口实现全部注册为映射器
这种方式的使用需要满足以下几个条件:
(1)dao 使用 mapper 动态代理实现
(2)映射文件名要与 Dao 接口名称相同
(3)映射文件要与接口在同一包中
(4)映射文件中的 namespace 属性值为 Dao 接口的全类名
<mappers>
<mapper package="com.kons.dao"/>
</mappers>