← 返回首页
Mybatis基础教程(六)
发表时间:2022-03-03 16:49:27
核心配置文件

mybatis的核心配置如下表所示: |配置名称|含义|配置简介| |-|-|-| |configuration|包裹所有配置文件|整个配置文件的顶级标签| |properties|属性|可以读取外部属性文件的配置信息| |setting|全局配置参数|改变mybatis运行时的行为,比如开启二级缓存,延迟加载等| |typeAliases|类型别名|用来设置一些别名来代替Java的长类型声明(如java.lang.int变成int),减少配置编码的冗余| |environments|环境集合属性变量|可以配置多套运行环境,如:开发环境,生成环境,测试环境。但是要明确指定当前要使用的唯一的运行环境| |environment|环境子属性对象|具体某个运行环境的配置| |mappers|映射器|配置SQL映射文件的位置,告知MyBatis去哪里加载SQL映射配置|

1.properties

<configuration>
  <!-- 引入 database.properties 文件 -->
  <properties resource="database.properties" />
      ......
  <dataSource type="POOLED">
      <property name="driver" value="${driver}"/>
      <property name="url" value="${url}"/>
      <property name="username" value="${username}"/>
      <property name="password" value="${password}"/>
  </dataSource>
</configuration>

或者

<!--properties 元素中直接配置 property 属性-->
<properties>
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/smbms?userUnicode=true&characterEncoding=utf-8&&zeroDateTimeBehavior=convertToNull"/>
    <property name="username" value="root"/>
    <property name="password" value="root"/>
</properties>
······
<dataSource type="POOLED">
    <property name="driver" value="${driver}"/>
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
</dataSource>

注意:resource 属性值的优先级高于 property子节点配置的值。例如:

<!--分析:这个例子中的 property 子节点设置的 username 和 password 的值会先被读取,
由于 database properties 中也设置了这两个属性,所以 resource 中同名属性将会覆盖 property 子节点的值。
-->
<properties resource="database.properties">
    <property name="username" value="root"/>
    <property name="password" value="123456"/>
</properties>

2.settings

settings 元素的作用是设置一些非常重要的设置选项,用于设置和改变 MyBatis 运行中的行为,比如此处设置 MyBatis 的 log 日志实现为 LOG4J,即使用 log4j 实现日志功能。

设置项 描述 允许值 默认值
cacheEnabled 对在此配置文件下的所有 cache 进行全局性开/关设置 true/false true
lazyLoadingEnabled 全局性设置懒加载。如果设为 false ,则所有相关联的都会被初始化加载 true/false true
autoMappingBehavior MyBatis对于resultMap自动映射匹配级别 ONE /PARTIAL:/FULL PARTIAL
logImpl 指定 Mybatis 所用日志的具体实现,未指定时将自动查找 SLF4J/LOG4J/LOG4J2 Not set

3.typeAliases

typeAliases 元素的作用是配置类型别名,通过与 MyBatis 的 SQL 映射文件相关联,减少输入多余的完整类名,以简化操作。具体配置如下:

<typeAliases>
    <!--这里给实体类取别名,方便在 mapper 配置文件中使用-->
    <typeAlias alias="User" type="cn.smbms.pojo.User"/>
</typeAliases>

以上这种写法的弊端在于如果一个项目中有多个 POJO 的时候,需要一一进行配置,所以有更加简化的写法,就是通过 package 的 name 属性直接指定包名, MyBatis 会自动扫描指定包下的 JavaBean ,并默认设置一个别名,默认名称为 JavaBean 的非限定类名。具体配置如下:

<!--配置了 typeAliases 元素,在Mapper.xml中的resultType属性无须写完全限定名com.smbms.pojo.User,
只需要写 User 或 user 不区分大小写。-->
<typeAliases>
    <!--默认名称:指定包下 JavaBean 的非限定类名-->
    <package name ="cn.smbms.pojo" />
</typeAliases>

4.environments

environments表示配置 MyBatis 的多套运行环境,MyBatis 可以配置多套运行环境,如开发环境、测试环境、生产环境等,我们可以灵活选择不同的配置,从而将 SQL 映射应用到不同的数据库环境上。这些不同的运行环境,就可以通过 environments 元素来配置。environments 元素节点下通过配置多个 environment 子元素节点,实现配置多套运行环境,但是不管增加几套运行环境,都必须要明确选择出当前的唯一一个运行环境(即默认运行环境:通过 default 指定)。这是因为毎个数据库都是对应一个 SqlSessionFactorγ 实例的,需要指明哪个运行环境将被创建,并把运行环境中设置的参数传递给 SqlSessionFactoryBuilder。具体配置如下:

<!-- 配置 mybatis 多套运行环境,通过 default 属性选择一套运行环境 -->
<environments default="development">
    <!--开发环境-->
    <environment id="development">
       <!-- 配置事务管理,采用 JDBC 的事务管理 -->
       <transactionManager type="JDBC" />
       <!-- POOLED:mybatis 自带的数据源,JNDI:基于 Tomcat 的数据源 -->
       <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>

    <!--测试环境-->
    <environment id="test">
      ··········
    </environment>
</environments>

注意:MyBatis 提供了三种数据源类型(UNPOOLED、POOLED、JNDI),这里我们使用 POOLED 数据源类型。该类型的实现利用 “池” 的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间,是 MyBatis 实现的简单的数据库连接池类型,它使数据库连接可被复用,不必在每次请求时都去创建一个物理连接。这对于高并发的 Web 应用是一种流行的处理方式,有利于快速响应请求。

5.mappers

mappers:映射器,在mappers中有两个子元素package,mapper,用来定义SQL的映射语句,我们只需要告诉 MyBatis 去哪里找到这些 SQL 语句(即去哪里找相应的 SQL 映射文件),整个项目中可以有1个或多个SQL 映射文件。有以下四种方式引入映射文件。

1)类路径引入

<!-- 将 mapper 映射文件加入到系统核心配置文件中 -->
<mappers>
   <mapper  resource="cn/smbms/dao/user/UserMapper.xml"/>
</mappers>

2)本地文件引入

<mappers>
   <mapper url="file:///E:/sqlmappers/UserMapper.xml"/>
</mappers>

3)接口类引入

<mappers>
   <mapper class="cn.mybatis.dao.ProviderMapper"/>
</mappers>

4)包名引入

<!--注意:这种方式必须保证接口名和 SQL 映射文件名相同,还必须在同一个包中。-->
<mappers>
   <package name="映射文件所在包名">
</mappers>