一、配置文件结构
MyBatis的核心配置文件配置了MyBatis的一些全局信息,包含数据库连接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性。
该配置文件的元素节点是有先后顺序的,如下
configuration 配置
properties 可以配置在Java属性配置文件中
settings 修改MyBatis在运行时的行为方式
typeAliases 为Java类型命名一个别名(简称)
typeHandlers 类型处理器
objectFactory 对象工厂
plugins 插件
environments 环境
transactionManager 事务管理器
dataSource 数据源
mappers映射器
其中,configuration元素是整个XML配置文件的根结点
二、properties元素
properties元素描述的都是外部化、可替代的属性。
1、可通过外部指定的方式,即配置在典型的Java属性配置文件中,如database.properties
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms
user=root
password=123
<properties resource="database.properties"/> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${driver}"/> <property name="url" value="${url}"/> <property name="username" value="${user}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments>
2、直接配置为xml,并使用这些属性对配置项实现动态配置
<properties> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/> <property name="user" value="root"/> <property name="password" value="123"/> </properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"></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>
若同时用了这两种方式,哪种方式优先呢?<property>子节点设置的值会先被读取,resource中的同名属性将会覆盖property子节点的值。所以resource属性值的优先级高于property子节点配置的值。
三、settings元素
setting元素的作用是设置一些非常重要的选项,用于设置和改变MyBatis运行中的行为,常用属性及值如下
- cacheEnabled 对在此配置文件下的所有cache进行全局性开/关设置 可选值为true、false 默认值为true
- lazyLoadingEnabled 全局性设置懒加载。如果设为false,则所有相关联的设置都会被初始化加载 可选值为true、false 默认值为true
- autoMappingBehavior MyBatis对于resultMap自动映射的匹配级别 可选值为NONE、PARTIAL、FULL 默认值为PARTIAL
四、typeAliases元素
typeAliases元素的作用是配置类型别名,通过与mybatis的sql映射文件相关联,减少输入多余的完整类名,以简化操作。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias type="edu.cn.pojo.User" alias="user"/> <typeAlias type="edu.cn.pojo.Provider" alias="provider"/> </typeAliases> </configuration>
这种写法的弊端在于,如果一个项目中有多个pojo,需要一一进行配置。有更加简化的写法,就是通过package的name属性直接指定包名,mybatis会自动扫描指定包下的javabean,并设置一个别名,默认名称为javabean的非限定类名。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <package name="edu.cn.pojo"/> </typeAliases> </configuration>
此时mapper中的写法如下,edu.cn.pojo.User的非限定类名为User
<select id="getUserList" resultType="User"> select * from smbms_user </select>
另外,mybatis已经为许多常见的java基础数据类型内建了相应的类型别名,一般都与其映射类型一致,并且都是大小写不敏感的,比如映射的类型int、Boolean、String、Integer等,它们的别名就是int、Boolean、String、Integer。
五、environments元素
Mybatis可以配置多套运行环境,如开发环境、测试环境、生产环境,我们可以选择不同的配置,从而将SQL映射到不同的数据库环境上。不管几套运行环境,都必须明确选择出当前唯一的一个运行环境,这是因为每个数据库都对应一个SqlSessionFactory实例,需要指明哪个运行环境将被创建,并把运行环境中设置的参数传递给SqlSessionFactoryBuilder。
<environments default="development"> <environment id="development"> <transactionManager type="JDBC"></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、通过default属性来指定默认的运行环境,与某个id一致。id的命名要确保唯一
2、transactionManager事务管理器,设置器类型为JDBC(MyBatis有两种事务管理类型,及JDBC和MANAGED),直接使用JDBC的提交和回滚功能,依赖于从数据源获得连接来管理事务的生命周期
3、dataSource元素,使用标准的JDBC数据源接口来配置JDBC连接对象的资源。MyBatis提供了三种数据源类型(UNPOOLED、POOLED、JNDI),这里使用POOLED数据源类型。该类型利用“池”的概念将JDBC连接对象组织起来,减少了创建新的连接实例时所必需的初始化和认证时间,是MyBatis实现的简单的数据库连接池类型,它使数据库连接可被复用,不必在每次请求时都去创建一个物理连接。
六、mappers元素
mappers映射器用来定于SQL的映射语句,我们只需要告诉MyBatis去哪里找到这些SQL语句,即去哪里找相应的SQL映射文件,可以使用类资源路径或者URL等,如下
<mappers> <mapper resource="cn/smbms/dao/user/UserMapper.xml"/> <mapper resource="cn/smbms/dao/provider/ProviderMapper.xml"/> </mappers>
<mappers> <mapper resource="/Users/yanguobin/UserMapper.xml"/> <mapper resource="/Users/yanguobin/ProviderMapper.xml"/> </mappers>