3.1、核心配置文件

  • SqlMapConfig.xml
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

注意配置项的先后顺序:

The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".

3.2、环境配置(environments)

MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

  • 环境选择:environments标签的default属性的值即为选择的环境id;例如,选择测试环境,则default="test"(测试环境id="test")
<!-- 配置环境 -->
<environments default="development">
    <!-- 开发环境 -->
    <environment id="development">
        <!-- 配置事务管理器类型 -->
        <transactionManager type="JDBC"/>
        <!-- 配置数据源(连接池) -->
        <dataSource type="POOLED">
            <!-- 配置连接数据库的4个基本信息 -->
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
    
    <!-- 测试环境 -->
    <environment id="test">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&amp;characterEncoding=UTF-8&amp;serverTimezone=GMT%2B8"/>
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
        </dataSource>
    </environment>
</environments>

Mybatis默认的事务管理器类型:JDBC,默认数据源(连接池):POOLED

3.3、属性(properties)

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

编写配置文件jdbcConfig.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456

引入外部配置文件

<!-- 引入外部配置文件 -->
<properties resource="jdbcConfig.properties" />

调用外部配置文件变量

<!-- 测试环境 -->
<environment id="test">
    <!-- 配置事务管理器类型 -->
    <transactionManager type="JDBC"/>
    <!-- 配置数据源(连接池) -->
    <dataSource type="POOLED">
        <!-- 配置连接数据库的4个基本信息 -->
        <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>
  • 可以直接引入外部文件

  • 可以在其中增加一些配置

<!-- 引入外部配置文件并在其中添加一些配置 -->
<properties resource="jdbcConfig.properties">
    <property name="username" value="root"/>
    <property name="password" value="112233"/>
</properties>
  • 当两个文件有同一字段时,优先使用外部文件的

3.4、类型别名(typeAliases)

类型别名可为 Java 类型设置一个缩写名字。它仅用于 XML 配置,意在降低冗余的全限定类名书写。

  • 在SqlMapConfig.xml中配置别名
<!-- 配置别名 -->
<typeAliases>
    <!-- 给实体类起别名 -->
    <typeAlias type="com.mybatis.pojo.User" alias="User" />
</typeAliases>
  • 在Mapper.xml中直接使用别名
<select id="findAll" resultType="User">
    select * from user
</select>

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean

<!-- 配置别名 -->
<typeAliases>
    <!-- 指定包名 -->
    <package name="com.mybatis.pojo"/>
</typeAliases>
  • 每一个在包 com.mybatis.pojo 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如 com.mybatis.pojo.User 的别名为 user
<select id="findAll" resultType="user">
    select * from user
</select>
  • 若有注解,则别名为其注解值
@Alias("hello")
public class User {
    ...
}
<select id="findAll" resultType="hello">
    select * from user
</select>

**注意 :**注解需要配合 <package name="com.mybatis.pojo"/> 使用

**使用场景:**在实体来较少时使用第一种方式,如果实体类很多则建议使用第二种方式

3.5、设置(settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。

一个配置完整的 settings 元素的示例如下:

<settings>
  <setting name="cacheEnabled" value="true"/>
  <setting name="lazyLoadingEnabled" value="true"/>
  <setting name="multipleResultSetsEnabled" value="true"/>
  <setting name="useColumnLabel" value="true"/>
  <setting name="useGeneratedKeys" value="false"/>
  <setting name="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>

我们暂时只需要了解以下三个:
在这里插入图片描述

3.6、映射器(mappers)

用于注册绑定Mapper配置文件

方式一:【推荐使用】

<!-- 使用相对于类路径的资源引用 -->
<mappers>
    <mapper resource="com/mybatis/dao/UserMapper.xml"/>
</mappers>

方式二:

<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
  <mapper class="com.mybatis.dao.UserMapper"/>
</mappers>

方式三:

<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
  <package name="com.mybatis.dao"/>
</mappers>

注意点 :

  • 接口和它的Mapper配置文件必须同名

  • Mapper配置文件存放路径有如下两种选择:

    • 1、在 resources 目录下建与 java 目录的同结构目录
      在这里插入图片描述

    • 2、接口和它的Mapper配置文件必须在同一个包下(这种方式得解决Maven静态资源过滤问题,如下)
      在这里插入图片描述

      Maven静态资源过滤问题:在pom.xml中加入如下配置

      <!-- 在build中配置resource,防止资源导出失败问题 -->
      <build>
          <resources>
              <resource>
                  <directory>src/main/java</directory>
                  <includes>
                      <include>**/*.properties</include>
                      <include>**/*.xml</include>
                  </includes>
                  <filtering>false</filtering>
              </resource>
              <resource>
                  <directory>src/main/resources</directory>
                  <includes>
                      <include>**/*.properties</include>
                      <include>**/*.xml</include>
                  </includes>
                  <filtering>false</filtering>
              </resource>
          </resources>
      </build>
      

3.7、其他配置(初学暂时不做了解)

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

Q.E.D.


Keep going, believe in yourself, and never give up.