MyBatis核心配置文件详解

本文详细解释了MyBatis配置文件中Environments标签的环境管理、transactionManager标签的事务管理设置以及dataSource标签的数据库连接配置,包括UNPOOLED、POOLED和JDNI数据源类型。同时介绍了properties标签用于外部属性配置的使用方法和优先级。
摘要由CSDN通过智能技术生成


一、Environments标签

1.Environment标签详解

<?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 说明该 XML 文件的根,xxx.dtd 文件是 XML 对应的规范,用来说明该 XML 文件可以使用那些标签 -->

<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>  <!-- 日志设置为 MyBatis 提供的标准日志 -->
    </settings>

    <!-- default 表示默认使用的环境 -->
    <!-- 默认环境是什么?当使用 mybatis 创建 SqlSessionFactory 对象的时候,没有指定环境的话,默认使用那个环境 -->
    <environments default="development">

        <!-- 一般一个数据库会对应一个SqlSessionFactory对象。-->
        <!-- 一个环境 environment 会对应一个 SqlSessionFactory 对象-->
        <environment id="development">
            <transactionManager type="JDBC"/>   <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/使用的数据库名"/>
                <property name="username" value="用户名"/>
                <property name="password" value="用户名对应的密码"/>
            </dataSource>
        </environment>

        <!-- 这是mybatis的另一个环境,也就是链接的数据库是另一个数据库mybatis-->
        <environment id="test">
            <transactionManager type="JDBC"/>   <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/使用的数据库名"/>
                <property name="username" value="用户名"/>
                <property name="password" value="用户名对应的密码"/>
            </dataSource>
        </environment>

    </environments>

    <mappers>
        <!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥-->
        <mapper resource="articleMapper.xml"/>
    </mappers>

</configuration>

(1)如何创建对应环境的 SqlSessionFactory对象

SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();

//这种方式创建的是默认环境的sqlSessionFactory
SqlSessionFactory sqlSessionFactory1 = builder.build(Resources.getResourceAsStream("mybatis-config.xml"));

//这种方式创建的是指定环境的sqlSessionFactory
SqlSessionFactory sqlSessionFactory2 = builder.build(Resources.getResourceAsStream("mybatis-config.xml"), "test");

2.transactionManager标签详解

  • 这个标签是用来配置事务管理器的,用来指定具体采用什么方式来管理事务的。
  • 关于这个标签的详细知识可以参考我的博客 ===> MyBatis概述与MyBatis入门程序 中的 MyBatis事务管理深度剖析部分。

3.dataSource标签详解

<?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 说明该 XML 文件的根,xxx.dtd 文件是 XML 对应的规范,用来说明该 XML 文件可以使用那些标签 -->

<configuration>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>  <!-- 日志设置为 MyBatis 提供的标准日志 -->
    </settings>

    <!-- default 表示默认使用的环境 -->
    <!-- 默认环境是什么?当使用 mybatis 创建 SqlSessionFactory 对象的时候,没有指定环境的话,默认使用那个环境 -->
    <environments default="development">

        <!-- 一般一个数据库会对应一个SqlSessionFactory对象。-->
        <!-- 一个环境 environment 会对应一个 SqlSessionFactory 对象-->
        <environment id="development">
            <transactionManager type="JDBC"/>   <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->

            <!--
                1.dataSource 被称为数据源
                2.dataSource 的作用是:为程序提供 Connection 对象。(但凡是给程序提供 Connection 对象的,都叫做数据源)
                3.数据源实际上是一套规范。JDK 中有这套规范:javax.sql.DataSource(这个数据源的规范,这套接口实际上是 JDK 规定的)
                4.我们自己也可以编写数据源组件,只要实现 Javax.sql.DataSource 接口就行了。实现接口当中的所有方法。这样就有了自己的数据怨怒。(数据库连接池是提供连接对象的,所有数据库连接池就是一个数据源)
                5.常见的连接池有:
                    阿里巴巴的德鲁伊连接池:druid
                    c3p0
                    dbcp
                    ...
                   6.type 属性用来指定数据源的类型,就是指定具体使用什么方式来获取 Connection 对象。
                        type 属性有三个值,必须是三选一
                        type= "[UNPOOLED | POOLED | JNDI]"
                        UNPOOLED: 不使用数据库连接池技术。每一次请求过来之后,都是创建新的 Connection 对象。
                        POOLED: 使用 mybatis 自己实现的数据库连接池。
                        JNDI: 集成第三方的数据库连接池。

                        JNDI 是一套规范。大部分 Web 容器都实现了 JNDI 规范。
                            例如:Tomcat、Jetty、WebLogic、WebSphere.
                            JNDI:是Java命名目录接口。
            -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/springboot-blog"/>
                <property name="username" value="root"/>
                <property name="password" value="GDB20031104!"/>
            </dataSource>
        </environment>

        <!-- 这是mybatis的另一个环境,也就是链接的数据库是另一个数据库mybatis-->
        <environment id="test">
            <transactionManager type="JDBC"/>   <!-- 事务管理设置为 JDBC 默认开启事务,需要手动提交 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/springboot-blog"/>
                <property name="username" value="root"/>
                <property name="password" value="GDB20031104!"/>
            </dataSource>
        </environment>

    </environments>

    <mappers>
        <!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥-->
        <mapper resource="articleMapper.xml"/>
    </mappers>

</configuration>
  • 注意:关于 type 属性的值不同,则每个属性可以使用的子标签不同,大家可以参考官方文档。 ===> mybatis中文网

(1)UNPOOLED

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/c78c6baf0282463f82fdb0528e083720.png

(2)POOLED

  • 提醒:正常使用连接池的话,池中有很多参数是需要设置的。设置好参数,可以让连接池发挥的更好。事半功倍的效果。
  • 具体连接池当中的参数如何配置呢?需要反复的根据当前业务情况进行测试。
    在这里插入图片描述

(3)JDNI

在这里插入图片描述
在这里插入图片描述


二、properties标签

  • 这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。

1.property标签

<?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>
    <properties>
        <property name="jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
        <property name="jdbc.url" value="jdbc:mysql://localhost:3306/springboot-blog"/>
    </properties>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="root"/>
                <property name="password" value="GDB20031104!"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!--sql映射⽂件创建好之后,需要将该⽂件路径配置到这⾥-->
        <mapper resource="articleMapper.xml"/>
    </mappers>
</configuration>

2.properties 属性配置文件

(1)xxx.properties属性配置文件

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springboot-blog
jdbc.username=root
jdbc.password=GDB20031104!

(2)mybatis-config.xml 配置文件

<?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>
    <properties resource="jdbc.properties">  // 从根路径下引入属性配置文件
    </properties>
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="articleMapper.xml"/>
    </mappers>
</configuration>

(3)配置文件的优先级

  • 如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
    • 首先读取在 properties 元素体内指定的属性。
    • 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
    • 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
  • 因此,通过方法参数传递的属性具有最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的则是 properties 元素中指定的属性。
  • 其中的 url 属性是使用绝对路径的方式来获取属性配置文件的。

  • 23
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小宝945

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值