3. MyBatis 核心配置文件标签

3. MyBatis 核心配置文件标签


  • 4.1 properties标签

  • 4.2 typeAliases标签

  • 4.3 environments标签

  • 4.4 mappers标签

  • 4.5 知识小结


常用标签


sqlMapConfig.xmlMyBatis框架的核心配置文件,主要用来配置数据源、映射文件、属性等

3. MyBatis 核心配置文件标签
1566869842463

4.1 properties标签

作用


设置属性键值对,属性可以外部配置,也可动态替换。

需求

在上一篇的入门案例中,我们使用最简单的方式配置 sqlMapConfig.xml,将 JDBC 访问数据库的账号密码直接写在 sqlMapConfig.xml 文件中,如下:

3. MyBatis 核心配置文件标签
image-20210312165417762

这就导致了一个耦合高的问题。

为了解决这个耦合高的问题,我们应该将这种变化的参数写到外部的配置文件中。而 sqlMapConfig.xml 只从外部的配置文件中读取需要的相关参数即可。

下面我们来看看如何应用起来。

应用


1. 在 resources 目录下,新增 jdbc.properties文件
3. MyBatis 核心配置文件标签
image-20210312172544480
jdbc.username=root
jdbc.password=********你的密码*********
jdbc.url=jdbc:mysql://localhost:3306/db3
jdbc.driverClass=com.mysql.jdbc.Driver
2. 修改sqlMapConfig.xml文件,通过读取外部文件来动态配置内部的属性值
3. MyBatis 核心配置文件标签
image-20210312173112026
<?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>

    <!--定义属性文件
        resource:从类路径下面读取外部文件
        url:从一个资源定位地址来读取配置文件
        提供参数使用: 可以使用 ${参数名} 进行参数引用
    -->

    <properties resource="jdbc.properties" >
    </properties>


    <environments default="default">
        <!--环境变量-->
        <environment id="default">
            <!--事务管理器:由JDBC管理事务 -->
            <transactionManager type="JDBC"/>
            <!--数据源配置信息:POOLED 使用连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载其他的映射文件 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

配置完毕之后,我们可以再执行一下测试代码,确认是否运行正常(接着上一篇中的入门案例),如下:

3. MyBatis 核心配置文件标签
image-20210312173310089
3.设置 properties 的内部参数属性说明

在 properties 标签虽然可以直接引用外部文件的参数,但是有时候我们还是希望可以设置一些默认参数。那么这时候就可以设置 properties 的内部属性。

3. MyBatis 核心配置文件标签
image-20210312174325290
<?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>

    <!--定义属性文件
        resource:从类路径下面读取外部文件
        url:从一个资源定位地址来读取配置文件
        提供参数使用: 可以使用 ${参数名} 进行参数引用
    -->

    <properties resource="jdbc.properties" >
        <!--先读取内部属性,后读取外部属性,在属性名一样时,外部属性起作用-->
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="root"/>
    </properties>

    <environments default="default">
        <!--环境变量-->
        <environment id="default">
            <!--事务管理器:由JDBC管理事务 -->
            <transactionManager type="JDBC"/>
            <!--数据源配置信息:POOLED 使用连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加载其他的映射文件 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

4.2 typeAliases标签

作用


给用户自定义的实体类定义别名,它只和 XML 配置有关,用来减少类完全限定名的冗余。

这样说这个作用有些抽象,下面再来截图说明如下:

在我们入门案例中,使用 UserMapper.xml 来映射一个 User 实体类的相关查询SQL方法。

3. MyBatis 核心配置文件标签
image-20210312182053593

在上面的示例中,我们发现如果需要在 resultType 设置实体类的映射,需要写完整 com.lijw.entity.User 路径。如果需要写的SQL映射比较多,那就比较繁琐了。

那么有没有办法简化一下呢?这个当然有,我们可以使用 typeAliases 标签给这个 com.lijw.entity.User 路径设置别名,然后引用这个别名来简化配置。

下面是常见的默认内置别名,下面看完了 内置别名 之后,我们再写个案例来演示 别名 的自定义设置。

内置别名


内置别名可以直接使用,别名不区分大小写

别名 映射类型
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean


string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean


date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

应用


方式一

单个实体类的别名设置 typeAlias

让我们回到 sqlMapConfig.xml 配置文件,配置如下:

3. MyBatis 核心配置文件标签
image-20210313014350526
    <!--
        typeAlias :
        1. type:指定实体类全名
        2. alias: 指定别名,如果省略这个属性,默认使用类名字做为别名,别名不区分大小写,通常别名使用小写。
    -->

    <typeAliases>
        <typeAlias type="com.lijw.entity.User" />
    </typeAliases>

当我们配置好了这个 User 的实体类别名之后,我们再回到映射文件UserMapper.xml中使用别名配置 映射关系,如下:

3. MyBatis 核心配置文件标签
image-20210313014504384
<!--
实体类的映射文件
namespace 指定接口的类全名
-->

<mapper namespace="com.lijw.dao.UserMapper">
    <!--
    查询语句
    id: 接口中方法的名字
    resultType:返回的实体类的类型,类全名
    -->

    <select id="findAllUsers" resultType="user">
        select * from user
    </select>
</mapper>

测试执行是否正常,如下:

3. MyBatis 核心配置文件标签
image-20210313014554516

可以看到,我们已经成功进行实体类的别名映射了。但是如果要我们一个个实体类去写映射,肯定会觉得特别累。那么如何去简化呢?

我们可以直接配置一个包下所有实体类的别名。

方式二

包扫描配置别名package

3. MyBatis 核心配置文件标签
image-20210313014957348
    <!--
        typeAlias :
        1. type:指定实体类全名
        2. alias: 指定别名,如果省略这个属性,默认使用类名字做为别名,别名不区分大小写,通常别名使用小写。
    -->

    <typeAliases>
        <!--
            package指定包名
            1. 自动将这个包下所有的实体类定义别名,别名就是类的名字。(在日志输出中会有乱码,不用理会,不影响使用,这是mybatis的bug)
            2. 如果有多个子包,只需要指定父包即可。
            3. 可以使用多个package标签,指定不同的包名
        -->

        <package name="com.lijw.entity"/>
    </typeAliases>

通过直接设置一个包下的所有实体类的别名映射,我们就不用一个个去写实体类的规则了。

4.3 environments标签

作用


MyBatis可以配置多种环境,有助于将SQL映射应用于多种数据库之中,如dev(development开发环境)、uat(test测试环境)、prd(produce生产环境)

尽管可以配置多个环境,但是每个环境只能有一个SqlSessionFactory实例。所以需要选择到底使用哪个环节的配置。

另外在 environments标签中还有 transactionManager 和 dataSource 两个标签,用途如下:

transactionManager事务管理器

类型 作用
JDBC 由JDBC进行事务的管理
MANAGED 事务由容器来管理,后期学习Spring框架的时候,所有的事务由容器管理

dataSource数据源

类型 作用
UNPOOLED 不使用连接池,每次自己创建连接
POOLED 使用mybatis创建的连接池
JNDI 由应用服务器提供连接池的资源,我们通过JNDI指定的名字去访问连接池资源

应用


下面我们创建一个默认default环境的配置参数,还有一个生产环境的配置参数。

3. MyBatis 核心配置文件标签
image-20210313165640287
<?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>

    <!--定义属性文件
        resource:从类路径下面读取外部文件
        url:从一个资源定位地址来读取配置文件
        提供参数使用: 可以使用 ${参数名} 进行参数引用
    -->

    <properties resource="jdbc.properties" >
        <!--先读取内部属性,后读取外部属性,在属性名一样时,外部属性起作用-->
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="root"/>
    </properties>

    <!--
        typeAlias :
        1. type:指定实体类全名
        2. alias: 指定别名,如果省略这个属性,默认使用类名字做为别名,别名不区分大小写,通常别名使用小写。
    -->

    <typeAliases>
        <!--
            package指定包名
            1. 自动将这个包下所有的实体类定义别名,别名就是类的名字。(在日志输出中会有乱码,不用理会,不影响使用,这是mybatis的bug)
            2. 如果有多个子包,只需要指定父包即可。
            3. 可以使用多个package标签,指定不同的包名
        -->

        <package name="com.lijw.entity"/>
    </typeAliases>

    <!--mybatis环境的配置-->
    <!-- 一个核心配置文件,可以配置多个运行环境,default默认使用哪个运行环境 -->
    <environments default="produce">
        <!-- 其中的一个运行环境,通过id来进行标识-->
        <!-- 默认环境变量-->
        <environment id="default">
            <!--
                事务管理器type的取值:
                1. JDBC:由JDBC进行事务的管理
                2. MANAGED:事务由容器来管理,后期学习Spring框架的时候,所有的事务由容器管理
            -->

            <transactionManager type="JDBC"/>
            <!--
                数据源:
                1. POOLED:使用mybatis创建的连接池
                2. UNPOOLED:不使用连接池,每次自己创建连接
                3. JNDI:由服务器提供连接池的资源,我们通过JNDI指定的名字去访问服务器中资源
            -->

            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

        <!-- 生产环境变量-->
        <environment id="produce">
            <!--事务管理器:由JDBC管理事务 -->
            <transactionManager type="JDBC"/>
            <!--数据源配置信息:POOLED 使用连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

    </environments>

    <!-- 加载其他的映射文件 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

4.4 mappers标签

作用


加载外部的实体类映射文件。

应用


3. MyBatis 核心配置文件标签
image-20210313170246901
1. 加载指定的resources目录下的映射文件
 <mapper resource="UserMapper.xml"/>

2. 
加载指定接口的全限定名
 <mapper class="com.dao.UserMapper"/>
 
3. 
加载并扫描指定包下所有的接口
 <package name="com.mapper"/>

4.5 知识小结

4.5.1 mybatis文件的关系介绍

3. MyBatis 核心配置文件标签
1589005133152

4.5.2 核心配置文件标签顺序

3. MyBatis 核心配置文件标签
1589005246218

要注意标签的顺序,不然会报错

4.5.3 常用标签

properties标签:该标签可以加载外部的properties文件

<!--定义属性文件
    resource:从类路径下面读取外部文件
    url:从一个资源定位地址来读取配置文件
    提供参数使用: 可以使用 ${参数名} 进行参数引用
-->

<properties resource="jdbc.properties" >
    <!--先读取内部属性,后读取外部属性,在属性名一样时,外部属性起作用-->
    <property name="jdbc.username" value="root"/>
    <property name="jdbc.password" value="root"/>
</properties>

typeAliases标签:设置类型别名

<!--
    typeAlias :
    1. type:指定实体类全名
    2. alias: 指定别名,如果省略这个属性,默认使用类名字做为别名,别名不区分大小写,通常别名使用小写。
-->

<typeAliases>
    <!--
        package指定包名
        1. 自动将这个包下所有的实体类定义别名,别名就是类的名字。(在日志输出中会有乱码,不用理会,不影响使用,这是mybatis的bug)
        2. 如果有多个子包,只需要指定父包即可。
        3. 可以使用多个package标签,指定不同的包名
    -->

    <package name="com.lijw.entity"/>
</typeAliases>

environments标签:数据源环境配置

<!--mybatis环境的配置-->
<!-- 一个核心配置文件,可以配置多个运行环境,default默认使用哪个运行环境 -->
<environments default="produce">
    <!-- 其中的一个运行环境,通过id来进行标识-->
    <!-- 默认环境变量-->
    <environment id="default">
        <!--
            事务管理器type的取值:
            1. JDBC:由JDBC进行事务的管理
            2. MANAGED:事务由容器来管理,后期学习Spring框架的时候,所有的事务由容器管理
        -->

        <transactionManager type="JDBC"/>
        <!--
            数据源:
            1. POOLED:使用mybatis创建的连接池
            2. UNPOOLED:不使用连接池,每次自己创建连接
            3. JNDI:由服务器提供连接池的资源,我们通过JNDI指定的名字去访问服务器中资源
        -->

        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driverClass}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>

    <!-- 生产环境变量-->
    <environment id="produce">
        <!--事务管理器:由JDBC管理事务 -->
        <transactionManager type="JDBC"/>
        <!--数据源配置信息:POOLED 使用连接池 -->
        <dataSource type="POOLED">
            <property name="driver" value="${jdbc.driverClass}"/>
            <property name="url" value="${jdbc.url}"/>
            <property name="username" value="${jdbc.username}"/>
            <property name="password" value="${jdbc.password}"/>
        </dataSource>
    </environment>

</environments>

mappers标签:加载映射配置

<!-- 加载其他的映射文件 -->
<mappers>
    <mapper resource="UserMapper.xml"/>
</mappers>

4.5.4 核心配置文件模板

上面我们已经了解了 Mybatis 配置文件的相关标签,但是每次都要去写一遍挺麻烦的,所以我们可以创建一个文件模板。方便我们后续直接使用。

3. MyBatis 核心配置文件标签
image-20210313171603718

设置的模板内容如下:

<?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>

    <!--定义属性文件
        resource:从类路径下面读取外部文件
        url:从一个资源定位地址来读取配置文件
        提供参数使用: 可以使用 ${参数名} 进行参数引用
    -->

    <properties resource="jdbc.properties" >
        <!--先读取内部属性,后读取外部属性,在属性名一样时,外部属性起作用-->
        <property name="jdbc.username" value="root"/>
        <property name="jdbc.password" value="root"/>
    </properties>

    <!--
        typeAlias :
        1. type:指定实体类全名
        2. alias: 指定别名,如果省略这个属性,默认使用类名字做为别名,别名不区分大小写,通常别名使用小写。
    -->

    <typeAliases>
        <!--
            package指定包名
            1. 自动将这个包下所有的实体类定义别名,别名就是类的名字。(在日志输出中会有乱码,不用理会,不影响使用,这是mybatis的bug)
            2. 如果有多个子包,只需要指定父包即可。
            3. 可以使用多个package标签,指定不同的包名
        -->

        <package name="com.lijw.entity"/>
    </typeAliases>

    <!--mybatis环境的配置-->
    <!-- 一个核心配置文件,可以配置多个运行环境,default默认使用哪个运行环境 -->
    <environments default="produce">
        <!-- 其中的一个运行环境,通过id来进行标识-->
        <!-- 默认环境变量-->
        <environment id="default">
            <!--
                事务管理器type的取值:
                1. JDBC:由JDBC进行事务的管理
                2. MANAGED:事务由容器来管理,后期学习Spring框架的时候,所有的事务由容器管理
            -->

            <transactionManager type="JDBC"/>
            <!--
                数据源:
                1. POOLED:使用mybatis创建的连接池
                2. UNPOOLED:不使用连接池,每次自己创建连接
                3. JNDI:由服务器提供连接池的资源,我们通过JNDI指定的名字去访问服务器中资源
            -->

            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

        <!-- 生产环境变量-->
        <environment id="produce">
            <!--事务管理器:由JDBC管理事务 -->
            <transactionManager type="JDBC"/>
            <!--数据源配置信息:POOLED 使用连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClass}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>

    </environments>

    <!-- 加载其他的映射文件 -->
    <mappers>
        <mapper resource="UserMapper.xml"/>
    </mappers>
</configuration>

配置完毕之后,我们来使用一下,如下:

3. MyBatis 核心配置文件标签
image-20210313171702626
3. MyBatis 核心配置文件标签
image-20210313171727133
3. MyBatis 核心配置文件标签
image-20210313171745301


原文始发于微信公众号(海洋的渔夫):3. MyBatis 核心配置文件标签

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/33672.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!