04、核心配置文件

一、总体概述

  • 核心配置文件如下:【并非官方标准版,我根据实际使用情况进行了配置】
<?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>
    <!--默认环境-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/powernode"/>
                <property name="username" value="root"/>
                <property name="password" value="111111"/>
            </dataSource>
        </environment>

        <!--添加一个新的环境-->
        <environment id="test">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.myql.cj.hdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/shop"/>
                <property name="username" value="root"/>
                <property name="password" value="111111"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--sql映射文件创建好之后,需要将该文件路径配置到这里-->
        <mapper resource="CarMapper.xml"/>
    </mappers>
</configuration>
  • 第一条语句基本为核心配置文件的标配:说明版本和编码方式

  • !DOCTYPE指明了在本个xml文件中的根标签是哪个,同时dtd也指明了对标签的约束【根标签只能有一个】

  • configuration 代表根标签,内部为核心文件的配置信息

  • environments 代表环境集合,可以配置多个环境,也就是说可以配置多个数据源。【数据源就是数据库】

  • default属性:表示默认使用的是哪个环境,default后面填写的是environmentid

  • environment:具体的环境配置,每个环境都有一个唯一的 id【主要包括:事务管理器的配置 + 数据源的配置】


二、environment

1、 什么是Environment标签?;

其实在概述中已经可以了解一个大概了,就是对应一个我们要使用的数据库。在一个核心配置文件中可能存在多个Environment标签。

2、 那么我们如何指定我们要使用的数据库呢?;

在我们创建 SqlSession 会话前,我们利用 SqlSessionFactoryBuilderbuild 方法创建 SqlSessionFactory

&nbsp;
这张图片说明,我们可以指定 SqlSessionFactory 使用的环境

@Test
public void testEnvironment() throws Exception{

    //创建一个SqlSessionFactoryBuilder对象
    SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
    //默认方式创建SqlSessionFactory对象
    SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
    //在创建会话工厂的时候直接指定使用的环境
    SqlSessionFactory test = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"), "test");     
}

3、 总结;

  • 一个环境对应一个数据源,一个数据源对应一个SqlSessionFactory
  • 当使用 mybatis 创建 SqlSessionFactory时,没有指定环境 id 时,使用的就是<environments default="development"> 默认环境

三、transactionManager

1、 什么是transactionManager呢?;

其代表的含义是事务管理器,用于指定采取什么样的机制来对事务进行处理。【事务指的是利用SQL对数据库的操作】

2、 如何使用transactionManager?;

  • type 为 JDBC时,采用JDBC的原生事务机制:

  • 开启事务:conn.setAutoCommit(false)

  • 处理业务 …

  • 提交事务: conn.commit()

  • type 为 MANAGED时,mybatis不再负责事务的管理,将事务管理交给其它的JEE(JavaEE)容器来管理。例如:spring

  • 如果找不到事务管理的容器时,就会导致没有事务的情况【只要执行一条DML语句,则提交一次】

3、 注意事项:;

  • <transactionManager type=/> 的取值只能为 JDBC/MANAGED【不区分大小写】
  • 这两种机制底层都是事务管理器接口的实现类

&nbsp;


四、dataSource

1、 dataSource是什么?;

  • 被称为数据源,为程序提供Connection对象。【我们把可以给程序提供Connection对象的都称为数据源】
  • 数据源其实是 javax.sal.DataSource中的一种规范,这套接口是JDK中提供的

2、 那么数据源是固定的嘛?;

  • 实则不然,我们可以根据接口去写一个自己的数据源的组件,只要实现了javax.sql.DataSource接口就可以。
  • 数据库连接池就是一个数据源【其可以提供连接对象的功能】

3、 数据源可以有多种类型:<dataSourcetype="POOLED">

  • type 指明了我们采用哪类型的数据源:

  • UNPOOLED:不使用数据库连接池技术,每一次请求过来之后,都会创建新的 Connection 对象

  • POOLED:使用 mybatis 自己实现的数据库连接池

  • JNDI:继承其他第三方的数据库连接池

&nbsp;

4、 针对不同的数据源类型,他们都有自己的属性:详情访问MyBatis中文网


五、properties

1、 properties有什么作用?;

mybatis 为了程序更加零活,连接数据库的信息可以单独写到一个属性资源文件中。【在resource文件夹爱下创建jdbc.properties文件】

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/powernode
jdbc.username = root
jdbc.password = root

在核心配置文件中,只需要 ${变量名} 引入使用即可

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

    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--${

     key}使用-->
                <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="CarMapper.xml"/>
    </mappers>
</configuration>

2、 如何引入创建的外部资源文件?;

  • 方法一:通过<properties resource = "从根路径起始的位置">
  • 方法二:通过<properties url = "从绝对路径的定位"> 【例如:file:///d:/jdbc.properties

为了方便我们一般直接将文件放到 resource 文件夹下【代表根目录下】,第二种方法并不推荐使用,因为可移植性差,跨平台直接使用项目的时候容易出现问题。

3、 注意事项:;
(1)该标签位于 configuration 标签内,但是位于 environments 标签的前面
(2)如果不知道 mybatis-config.xm l文件中标签的编写顺序的话,可以有两种方式知道它的顺序:

  • 查看 dtd 约束文件
  • 根据 IDEA 报错提示信息修改

六、mapper

  • mapper 标签用来指定 SQL 映射文件的路径 【通过核心配置文件找到SQL映射文件】
  • 通过 resource 指定文件的位置:【假设文件在resource的com文件夹下】
<mappers>
  <mapper resource="com/CarMapper.xml"/>
</mappers>
  • 通过 url 指定文件的位置:【假设文件在D盘下的·resource文件夹下】
<mappers>
  <mapper url="file:///D:/resource/CarMapper.xml"/>
</mappers>