mybatis的核心配置如下表所示: |配置名称|含义|配置简介| |-|-|-| |configuration|包裹所有配置文件|整个配置文件的顶级标签| |properties|属性|可以读取外部属性文件的配置信息| |setting|全局配置参数|改变mybatis运行时的行为,比如开启二级缓存,延迟加载等| |typeAliases|类型别名|用来设置一些别名来代替Java的长类型声明(如java.lang.int变成int),减少配置编码的冗余| |environments|环境集合属性变量|可以配置多套运行环境,如:开发环境,生成环境,测试环境。但是要明确指定当前要使用的唯一的运行环境| |environment|环境子属性对象|具体某个运行环境的配置| |mappers|映射器|配置SQL映射文件的位置,告知MyBatis去哪里加载SQL映射配置|
1.properties
<configuration>
<!-- 引入 database.properties 文件 -->
<properties resource="database.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>
</configuration>
或者
<!--properties 元素中直接配置 property 属性-->
<properties>
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?userUnicode=true&characterEncoding=utf-8&&zeroDateTimeBehavior=convertToNull"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</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>
注意:resource 属性值的优先级高于 property子节点配置的值。例如:
<!--分析:这个例子中的 property 子节点设置的 username 和 password 的值会先被读取,
由于 database properties 中也设置了这两个属性,所以 resource 中同名属性将会覆盖 property 子节点的值。
-->
<properties resource="database.properties">
<property name="username" value="root"/>
<property name="password" value="123456"/>
</properties>
2.settings
settings 元素的作用是设置一些非常重要的设置选项,用于设置和改变 MyBatis 运行中的行为,比如此处设置 MyBatis 的 log 日志实现为 LOG4J,即使用 log4j 实现日志功能。
| 设置项 | 描述 | 允许值 | 默认值 |
|---|---|---|---|
| cacheEnabled | 对在此配置文件下的所有 cache 进行全局性开/关设置 | true/false | true |
| lazyLoadingEnabled | 全局性设置懒加载。如果设为 false ,则所有相关联的都会被初始化加载 | true/false | true |
| autoMappingBehavior | MyBatis对于resultMap自动映射匹配级别 | ONE /PARTIAL:/FULL | PARTIAL |
| logImpl | 指定 Mybatis 所用日志的具体实现,未指定时将自动查找 | SLF4J/LOG4J/LOG4J2 | Not set |
3.typeAliases
typeAliases 元素的作用是配置类型别名,通过与 MyBatis 的 SQL 映射文件相关联,减少输入多余的完整类名,以简化操作。具体配置如下:
<typeAliases>
<!--这里给实体类取别名,方便在 mapper 配置文件中使用-->
<typeAlias alias="User" type="cn.smbms.pojo.User"/>
</typeAliases>
以上这种写法的弊端在于如果一个项目中有多个 POJO 的时候,需要一一进行配置,所以有更加简化的写法,就是通过 package 的 name 属性直接指定包名, MyBatis 会自动扫描指定包下的 JavaBean ,并默认设置一个别名,默认名称为 JavaBean 的非限定类名。具体配置如下:
<!--配置了 typeAliases 元素,在Mapper.xml中的resultType属性无须写完全限定名com.smbms.pojo.User,
只需要写 User 或 user 不区分大小写。-->
<typeAliases>
<!--默认名称:指定包下 JavaBean 的非限定类名-->
<package name ="cn.smbms.pojo" />
</typeAliases>
4.environments
environments表示配置 MyBatis 的多套运行环境,MyBatis 可以配置多套运行环境,如开发环境、测试环境、生产环境等,我们可以灵活选择不同的配置,从而将 SQL 映射应用到不同的数据库环境上。这些不同的运行环境,就可以通过 environments 元素来配置。environments 元素节点下通过配置多个 environment 子元素节点,实现配置多套运行环境,但是不管增加几套运行环境,都必须要明确选择出当前的唯一一个运行环境(即默认运行环境:通过 default 指定)。这是因为毎个数据库都是对应一个 SqlSessionFactorγ 实例的,需要指明哪个运行环境将被创建,并把运行环境中设置的参数传递给 SqlSessionFactoryBuilder。具体配置如下:
<!-- 配置 mybatis 多套运行环境,通过 default 属性选择一套运行环境 -->
<environments default="development">
<!--开发环境-->
<environment id="development">
<!-- 配置事务管理,采用 JDBC 的事务管理 -->
<transactionManager type="JDBC" />
<!-- POOLED:mybatis 自带的数据源,JNDI:基于 Tomcat 的数据源 -->
<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">
··········
</environment>
</environments>
注意:MyBatis 提供了三种数据源类型(UNPOOLED、POOLED、JNDI),这里我们使用 POOLED 数据源类型。该类型的实现利用 “池” 的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间,是 MyBatis 实现的简单的数据库连接池类型,它使数据库连接可被复用,不必在每次请求时都去创建一个物理连接。这对于高并发的 Web 应用是一种流行的处理方式,有利于快速响应请求。
5.mappers
mappers:映射器,在mappers中有两个子元素package,mapper,用来定义SQL的映射语句,我们只需要告诉 MyBatis 去哪里找到这些 SQL 语句(即去哪里找相应的 SQL 映射文件),整个项目中可以有1个或多个SQL 映射文件。有以下四种方式引入映射文件。
1)类路径引入
<!-- 将 mapper 映射文件加入到系统核心配置文件中 -->
<mappers>
<mapper resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>
2)本地文件引入
<mappers>
<mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
</mappers>
3)接口类引入
<mappers>
<mapper class="cn.mybatis.dao.ProviderMapper"/>
</mappers>
4)包名引入
<!--注意:这种方式必须保证接口名和 SQL 映射文件名相同,还必须在同一个包中。-->
<mappers>
<package name="映射文件所在包名">
</mappers>