MyBatis要想正常使用,首先就需要配置它的核心配置文件。官方明确指出应将该文件命名为:mybatis-config.xml
该文件实现了什么功能,又如何实现的,咱今天就来侃一侃。


文章目录

  • configuration
  • properties
  • setting
  • typeAliases
  • 其他配置
  • environments
  • databaseIdProvider
  • mappers
  • 写在最后



MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息。


配置文档的顶层结构如下:


mybatis核心配置文件mysql8 mybatis核心配置文件名称_mybatis核心配置文件mysql8


接下来,便根据配置文件顶层结构分别进行解析。

configuration

  < configuration >标签便是包含上图所给的所有标签的总标签。所有配置内容均需包含在它的标签体内。

properties

  < properties >标签中的属性可以在外部进行配置,并可以进行动态替换。既可以在典型的 Java 属性文件中配置这些属性,亦可以在< properties >元素的子元素中设置。
  举个栗子:在核心配置文件中引入外部配置文件。

db.properties

driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/mybatis?&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
username = root
password = root

要想在核心配置文件中引入 db.properties 文件,可直接在配置文件中引入:

<!--此处引入外部配置文件,参数可不写,直接写为自闭合形式-->
<properties resource="db.properties"/>

注意事项:
配置文件中,属性具有自身的读取顺序:
  首先,读取在 properties 元素体内指定的属性。然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
最后,读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。

在对外部配置文件进行引入时,也可以对其进行一些操作:

mybatis核心配置文件mysql8 mybatis核心配置文件名称_java_02

setting

  < setting >标签是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。在官方文档中有详尽的记录,不再赘述。
常用的设置基本用作增加可读性以及实现日志功能。

typeAliases

  它仅是为 Java 类型设置一个短的名字,只和XML配置有关。存在意义便是用来减少类完全限定名的冗余
起别名有两种方式,分别为对单个类起别名 和 指定一个包,MyBatis会在包名下自动搜索需要的 Java Bean,默认将其所有实体类起名为 类名 (首字母小写)。

<!--为单个实体类起别名-->
<typeAliases>
    <typeAlias type="com.wu.pojo.User" alias="User"/>
</typeAliases>

实体类比较少时,推荐该方案。

<!--为整个包下的所有实体类起别名-->
<typeAliases>
    <typeAlias name="com.wu.pojo"/>
</typeAliases>

实体类十分多时,推荐此方式。
注意事项:

  • 为单个实体类起别名时,可自定义别名。
  • 为整个包下所有实体类起别名则无法自定义别名。
    (若必须自定义,可通过在所需实体类中增加注解实现)
    举个栗子:
import org.apache.ibatis.type.Alias;

//通过标签自定义别名
@Alias("user")
public class User {
	private int id;
	private String name;
	private String password;
}

其他配置

  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)

在官方文档中均有细致说明,不是分析的重点,此处不作说明。

environments

  MyBatis可以配置适应多种环境,但每个SqlSession实例只能选择一种环境。所以,要学会使用配置多套运行环境。
MyBatis默认的事务管理器是 JDBC,< transactionManager >标签下的 type 值为 “JDBC”
MyBatis连接池为 POOLED ,所以:< dataSource > type=“POOLED”
< propery >标签内放置的便是与数据库连接的具体数据,可根据个人数据库信息作更改。

<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>
</environments>

databaseIdProvider

  数据库厂商标识,MyBatis可根据不同的数据库厂商执行不同的语句,这种多厂商的支持是基于映射语句中的 databaseId 属性。 MyBatis 会加载带有匹配当前数据库 databaseId 属性和所有不带 databaseId 属性的语句。
   如果同时找到带有 databaseId 和不带 databaseId 的相同语句,则后者会被舍弃。

  为支持多厂商特性,只需在核心配置文件中加入 < databaseIdProvider > 即可:

<databaseIdProvider type="DB_VENDOR" />

mappers

  既然 MyBatis 的行为已经由上述元素配置完了,现在就要来定义 SQL 映射语句了。 但首先,需要告诉 MyBatis 到哪里去找到这些语句。 因为Java并没有行之有效的方案来解决这个问题,因此就需要我们手动输入mapper接口路径来进行绑定和注册。
  同样,它有两种方式:
第一种:通过XML注册

<!--每一个Mapper.xml都需要在MyBatis核心配置文件中注册-->
<mappers>
    <!--每级目录之间的分隔用 '/' 实现-->
    <mapper resource="com/wu/dao/UserMapper.xml"/>
</mappers>

要注意,resource 属性间的层级路径要通过 '/'来实现,配置文件的分级格式和普通代码并不相同。

第二种:通过 class 文件注册

<mappers>
    <!--每级目录之间的分隔用 '.' 实现-->
    <mapper resource="com.wu.dao.UserMapper"/>
</mappers>

注意事项:

  • 接口和它的Mapper配置必须同名
  • 接口和它的Mapper配置文件必须在同一包下

写在最后

  最后,附上一份包含头文件的完整 mybatis-config.xml 文件,实现了标准日志工厂及开启全局缓存。
具体内容看官们自行修改,下次再见。

<?xml version="1.0" encoding="UTF8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--configuration核心配置文件-->
<configuration>
    <!--此处引入外部配置文件,参数可不写,直接写为自闭合形式-->
    <properties resource="db.properties"/>

    <settings>
        <!--标准的日志工厂实现-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
        <!--显式的开启全局缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>

    <!--可以给实体类起别名-->
    <typeAliases>
        <typeAlias type="com.wu.pojo.User" alias="User"/>
    </typeAliases>

    <!--环境配置-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
            	<!--此处值从db.properties文件中取出-->
                <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/wu/dao/UserMapper.xml"/>
    </mappers>
</configuration>