一、mybatis-config.xml 的作用

mybatis-config.xml是MyBatis核心配置文件,该文件配置了MyBatis的一些全局信息,包含数据库连接信息和Mybatis运行时所需的各种特性,以及设置和影响Mybatis行为的一些属性



二、Mybatis核心配置文件结构

configuration配置
	properties 可以配置在Java属性配置文件中
	settings 修改Mybatis在运行时的行为方式
	typeAliases 为Java类型命名一个别名(简称)
	typeHandlers 类型处理器
	objectFactory 对象工厂
	plugins 插件
	environments 环境
		environment 环境变量
			transactionManager 事务管理器
			dataSource 数据源
   		mappers 映射器





三、配置文件讲解

configuration

configuration元素是整个XML配置文件的根节点,相当于MyBatis的总管

MyBatis所有的配置信息都会存放在这里面。Mybatis提供了设置这些配置信息的方法。

Configuration可从配置文件里获取属性值,也可以通过程序直接设置



properties元素

properties元素描述的都是外部化、可替代的属性

通过外部指定的方式(通过在典型Java属性配置文件 如database.properties)

database.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms
user=root
password=root

mybatis-config.xml 引入database.properties

!--引入 database.properties 文件-->
<properties resource="database.properties"/>
	……
	<dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
	</dataSource>

上述代码中,driver url username password属性将会用database.properties文件中的值来替换


直接配置为xml,并使用这些属性对配置项实现动态配置

mybatis-config.xml

!-- properties元素中直接配置property属性-->
<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="root"/></properties>
	……
	<dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${user}"/>
        <property name="password" value="${password}"/>
    </dataSource>

在上述代码中,driver url username password将会由properties元素中设置的值来替换


两种方式优先级

resource属性值的优先级高于property子节点配置的值


settings元素

settings元素的作用是设置一些非常重要的选项,用于设置和改变Mybatis运行中的行为



settings元素支持的属性

cacheEnabled : 对在此配置文件下的所有cache进行全局性开/关设置 - true|false

lazyLoadingEnabled : 全局性设置懒加载。如果设为false,则所有相关联的设置都会被初始化加载 -true|false

autoMappingBehavior : Mybatis对于resultMap自动映射的匹配级别 -PAPTLAL|NONE|FULL



type Aliases元素

配置类型别名,通过与MyBatis的SQL映射文件相关联,减少输入多余的完整类名,以简化操作

1.基础配置

<typeAliases>
    <!--这里给实体类取别名,方便在mapper配置文件中使用-->
    <typeAlias alias="user" type="cn.smbms.pojo.User"/>
    <typeAlias alias="provider" type="cn.smbms.pojo.Provider"/>
    ……
</typeAliases>



2.简便配置

第一种方法弊端在于:如果一个项目中有多个POJO,需要一一进行配置。所以在第二种方法中,我们通过name属性直接指定包名,让Mybatis自动去扫描指定包下的JavaBean,并设置一个别名

<typeAliases>
    <package name="cn.smbms.pojo"/>
</typeAliases>

<mapper namespace="cn.smbms.dao.user.User Mapper">
    <!--查询用户表记录数-->
    <select id="count" result Type="int">select count(1) as count from smbms_user
    </select>
    <!--查询用户列表-->
    <select id="get User List" result Type="User">select * from smbms_user/select>
</mapper>

另外,Mybatis已经为许多常见的Java基础数据类型内建了相应的类型别名。一般都与其映射类型一致,并且都是大小写不敏感的,比如映射的类型int Boolean String Integer等,它们的别名都是int Boolean String Integer



environments元素

配置不同的运行环境

但是不管增加几套运行环境,都必须要明确选择出当前唯一的一个运行环境。这是因为每个数据库都对应一个Sql Session Factory实例,需要指明哪个运行环境被创建,并把运行环境中设置的参数传递个Sql Session Factory Builder

配置如下

<environments default="development">
<!--开发环境-->
    <environment id="development">
        <transaction Manager type="JDBC"/>
        <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>
    <!--测试环境-->
    <environment id="test">
        ……
    </environment>
 </environments>

上述代码中,需要注意以下几个关键点:

(1)默认的运行环境ID:通过default属性来指定当前的运行环境ID为development,对于环境ID的命名要确保唯一。

(2)transactionManager事务管理器:设置其类型为JDBC(My Batis有两种事务管理类型,即JDBC和MANAGED),直接使用JDBC的提交和回滚功能,依赖于从数据源获得连接来管理事务的生命周期。

(3)dataSource元素:使用标准的JDBC数据源接口来配置JDBC连接对象的资源。My Batis提供了三种数据源类型UNPOOLED、POOLED、JNDI),这里使用POOLED数据源类型。该类型利用“池”的概念将JDBC连接对象组织起来,减少了创建新的连接实例时所必需的初始化和认证时间,是My Batis实现的简单的数据库连接池类型,它使数据库连接可被复用,不必在每次请求时都去创建一个物理连接。对于高并发的Web应用,这是一种流行的处理方式,有利于快速响应请求。



mappers

用来定义SQL的映射语句

1.使用类资源路径获取资源

<mappers>
    <mapper resource="cn/smbms/dao/user/User Mapper.xml"/>
    <mapper resource="cn/smbms/dao/provider/Provider Mapper.xml"/></mappers>



2.使用URL获取资源

<mappers>
    <mapper url="file:///E:/sqlmappers/User Mapper.xml"/>
    <mapper url="file:///E:/sqlmappers/Provider Mapper.xml"/>
</mappers>





四、参考资料

《SSM轻量级框架应用实战》