SSM框架开发应用(六)——MyBatis-核心配置文件

MyBatis- 核心配置文件

在学习完MyBatis的核心对象之后,接下来我们学习它的核心配置文件(mybatis-config.xml)。

该文件配置了MyBatis的一些全局信息,包含数据库链接信息和MyBatis运行时所需的各种特性,以及设置和影响MyBatis行为的一些属性。

下面先了解它的文件结构。

一、mybatis-config.xml文件结构

Mybatis-config.xml文件需配置一些基本元素。

需要注意的是,该配置文件的元素节点是有先后顺序的。

其层次如图所示:
SSM框架开发应用(六)——MyBatis-核心配置文件_第1张图片
从图中可看出configuration元素是整个XML配置文件的根节点。

其角色就相当于是MyBatis的总管,MyBatis所有的配置信息都会存放在它里面。

MyBatis还提供了设置这些配置信息的方法。

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

Configuration可供配置的内容如下:

1. properties元素
properties元素描述的都是外部化、可替代的属性。
那么这些属性如何获取?有以下两种方式实现:
(1)Java属性配置文件
可通过外部指定的方式,即配置在典型的Java属性配置文件中(如database.properties),并使用这些属性对配置项实现动态配置。
代码如下。

// resources/database.properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms
username=root
password=root


        
        
        
        <configuration>

            
            <properties resource="database.properties"/>
            
            
            <settings>
                <setting name="logImpl" value="LOG4J" />
            settings>
            
            <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>
            
            
            <mappers>
                <mapper resource="com/smbms/dao/provider/ProviderMapper.xml"/>
                <mapper resource="com/smbms/dao/user/UserMapper.xml"/>
            mappers>
            
        configuration>

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

(2)直接配置为XML
直接配置为XML,并使用这些属性对配置项实现动态配置。
代码如下:


        
        
        <configuration>

            
            <properties>
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            properties>

            
            <settings>
                <setting name="logImpl" value="LOG4J" />
            settings>
            
            <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>
            
            
            <mappers>
                <mapper resource="com/smbms/dao/provider/ProviderMapper.xml"/>
                <mapper resource="com/smbms/dao/user/UserMapper.xml"/>
            mappers>
            
        configuration>

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

【思考】
若两种方式同时都用了,那么那种方式优先?如下代码所示:

        <properties resource="database.properties">
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        properties>

【分析】
这个例子中的property子节点设置的username和password的值会先被读取。
由于database.properties中也设置了这两个属性,所以resource中同名属性将会覆盖property子节点的值。
【结论】
resource属性值的优先级高于property子节点配置的值。

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

常用配置如图所示:
SSM框架开发应用(六)——MyBatis-核心配置文件_第2张图片
【提示】其他配置可参考MyBatis开发手册进行学习。

3. typeAliases元素
typeAliases元素的作用是配置类型别名,通过与MyBatis的SQL映射文件相关联,减少输入多于的完整类名,以简化操作。

具体配置如下所示:

        <typeAliases>
            
            <typeAlias alias="user" type="com.smbms.pojo.User"/>
            <typeAlias alias="provider" type="com.smbms.pojo.Provider"/>
        typeAliases>

以上这种写法的弊端在于如果一个项目中有多个POJO的时候,需要一一进行配置。

以有更加简化的写法,就是通过package的name属性直接指定包名。

MyBatis会自动扫描指定包下的JavaBean,并默认设置一个别名,默认名称为JavaBean的非限定类名。

具体配置如下所示:

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

那么UserMapper.xml中的配置如下:

   
        
        <mapper namespace="com.smbms.dao.user.UserMapper">

            
            <select id="count" resultType="int">
                select count(1) as count from smbms_user
            select>
            
            
            <select id="getUserList" resultType="User">
                select * from smbms_user
            select>   
            
        mapper>

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

关于这部分内容,会在后续学习中详细介绍。

4. environments元素

MyBatis可以配置多套运行环境,如开发环境、测试环境、生产环境等,我们可以灵活选择不同的配置,从而将SQL映射应用到不同的数据库环境上。

这些不同的运行环境,就可以通过environments元素来配置,但是不管增加几套运行环境,都必须要明确选择出当前的唯一一个运行环境。

这是因为每个数据库都是对应一个SqlSessionFactory实例的,需要指明哪个运行环境奖杯创建,并把运行环境中设置的参数传递给SqlSessionFactoryBuilder。

具体配置如下:

        <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">
                ...
            environment>
        environments>

上述代码中,需要注意以下几个关键点:
(1)默认的运行ID,通过default属性来指定当前的运行环境ID为development,对于环境ID的命名要确保唯一;
(2)transactionManager事务管理器,设置其类型为JDBC(MyBatis有两种事务管理器,即JDBC、MANAGED),直接使用JDBC的提交和回滚功能,依赖于从数据源获得链接来管理事务的生命周期;
(3)datasource元素使用标准的JDBC数据源接口来配置JDBC连接对象的资源。MyBatis提供了三中数据源类型(UNPOOLED、POOLED、JNDI),这里我们使用POOLED数据源类型。该类型的实现利用“池”的概念将JDBC链接对象组织起来,避免了创建新的链接实例时所必需的初始化和认证时间,是MyBatis实现的简单的数据库连接池类型,它使数据库链接可被复用,不必在每次请求时都去创建一个物理连接。这对于高并发的Web应用是一种流行的处理方式,有利于快速响应请求;

5. mappers元素

mappers,映射器,用来定义SQL的映射语句。

我们只需要告诉MyBatis去哪里摘到这些SQL语句,即去哪里找相应的SQL映射文件。

可以使用类资源路径或者URL等,具体代码如下所示:
(1)使用类资源路径获取资源:

        
        <mappers>
            <mapper resource="com/smbms/dao/provider/ProviderMapper.xml"/>
            <mapper resource="com/smbms/dao/user/UserMapper.xml"/>
        mappers>

(2)使用URL获取资源:

        
        <mappers>
            <mapper url="file:///E:/mappers/ProviderMapper.xml"/>
            <mapper url="file:///E:/mappers/UserMapper.xml"/>
        mappers>

以上这些配置告诉MyBatis如何找到SQL映射文件,而其更详尽的信息配置在每个SQL映射文件里,我们将在后续学习中学习。

二、DTD文件的引入

MyBatis有两种配置文件,核心配置文件(mybatis-config.xml)和SQL映射文件(mapper.xml)。

这两种配置文件都需要手动引入各自的DTD文件(mybatis-3-config.dtd和mybatis-3-mapper.dtd),并在IDE中进行相应配置。
否则在编写配置文件的时候,节点元素以及属性等不能自动联想。

具体引入方法如下:

1. DTD文件的位置

这两个DTD文件在mybatis-3.2.2jar里,以压缩包形式解压并打开。

DTD文件路径为mybatis-3.2.2\org\apache\ibatis\builder\xml,如图所示:
SSM框架开发应用(六)——MyBatis-核心配置文件_第3张图片
将这两个文件复制出来,放置在一个统一的位置(如D:\),以方便下一步的手动引入。
这里,我就放在(G:\DTD文件\)下了。

2. 新增XML、Catalog

在MyEclipse的菜单中,选择“Window - Preferences”选项,弹出如图所示的窗口:
SSM框架开发应用(六)——MyBatis-核心配置文件_第4张图片
选择XML Catalog,在右侧窗口选中User Specified Entries。
单击“Add”按钮,弹出如图所示的窗口:
SSM框架开发应用(六)——MyBatis-核心配置文件_第5张图片

Location:单击“File System”按钮,选择DTD文件位置(G:\DTD文件\mybatis-3-config.dtd)。

或者可以选择把该DTD文件放入本项目工程中的某一固定位置,单击“Workspace”按钮进行导入。

Key type:Public ID(默认即可)。

Key:-//mybatis.org//DTD Config 3.0//EN
(与mybatis-config.xml文件头中的“-//mybatis.org//DTD Config 3.0//EN”相同)

保存完配置之后,即可在编写mybatis-config.xml的时候,实现自动联想节点元素以及属性等。方便用户操作。

mapper.xml文件配置同上,引入mybatis-3-mapper.dtd文件即可。

此处不再赘述。

你可能感兴趣的:(SSM框架开发应用(六)——MyBatis-核心配置文件)