MyBatis 核心配置文件( mybatis-config.xml),该文件配置了 MyBatis 的一些全局信息,包含数据库连接信息和 MyBatis 运行时所需的各种特性,以及设置和影响 MyBatis 行为的一些属性。

  

mybatis-config.xml 文件结构

  mybatis-config.xml 文件需配置一些基本元素,需要注意的是,该配置文件的元素节点是有先后顺序的,其层次结构如下图:

  说明

    1、从上图中可以看出,configuration 元素是整个 XML 配置文件的根节点,其角色就相当于是 MyBatis 的总管, MyBatis 所有的配置信息都会存放在它里面。 MyBatis 还提供了设置这些配置信息的方法。 Configuration 可从配置文件里获取属性值,也可以通过程序直接设置。Configuration 可供配置的内容如下。

    2、mybatis-config.xml  文件的元素节点是有一定顺序的,节点位置若不按顺序排位,那么 XML 文件会报错。

1、properties 元素
  properties 元素描述的都是外部化、可替代的属性。那么这些属性如何获取?有以下两种方式实现。

  (1)可通过外部指定的方式,将数据库连接相关信息配置在典型的 Java 属性配置文件中(如 database. properties),并使用这些属性对配置项实现动态配置。即通过 resource 属性从外部指定 properties 属性文件( database.properties ),该属性文件描述数据库连接的相关配置(数据库驱动、连接数据库的 url ,数据库用户名,数据库密码),位置也是在/ resources 目录下。代码如下:

①database. properties:
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/smbms?userUnicode=true&characterEncoding=utf-8&&zeroDateTimeBehavior=convertToNull
username=root
password=root ②mybatis-config.xml 部分内容:
<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> 说明:上述代码中,driver、url、username、password 属性将会用包含进来的 database. properties 文件中的值来替换。

  (2)直接配置为 xml ,并使用这些属性对配置项实现动态配置,代码如下:

 mybatis-config.xml 部分内容:

<!--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> 说明:上述代码中,driver、url、username、password 将会由 properties 元素中设置的值来替换。

  问题思考:若两种方式同时都用了,那么哪种方式优先?如下代码所示:

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

2、settings 元素

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

  常用配置如下表:

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

  

  

  autoMappingBehavior 讲解

  Mybatis的自动映射策略默认是开启的,而且默认是只对非嵌套的resultMap进行自动映射。这是通过Mybatis的全局配置autoMappingBehavior参数配置的。它一共有三种取值,分别是NONE、PARTIAL和FULL。

NONE:表示不启用自动映射

PARTIAL:表示只对非嵌套的resultMap进行自动映射

FULL:表示对所有的resultMap都进行自动映射

  

3、typeAliases 元素

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

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

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

<typeAliases>
<!--默认名称:指定包下 JavaBean 的非限定类名-->
<package name ="cn.smbms.pojo" />
</typeAliases>

说明:
  1、配置了 typeAliases 元素,在 Mapper.xml 中的 resultType 属性无须写完全限定名com.smbms.pojo.User,只需要写 User 或 user 不区分大小写。
  
2、对于基础数据类型, MyBatis 已经为许多常见的 Java 类型内建了相应的类型别名,一般都是与其映射类型一致,并且它们都是大小写不敏感的,
   比如映射的类型 int、Boolean、String、Integer 等,它们的别名就是 int 、Boolean或boolean、String或string、Integer或integer。

4、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> environment:配置 MyBatis 的一套运行环境,需指定运行环境 ID、事务管理、数据源配置等相关信息。

  注意点:

     1、默认的运行 ID :通过 default 属性来指定当前的运行环境 ID 为 development ,对于环境 ID 的命名要确保唯一。
     2、transactionManager 事务管理器,设置其类型为 JDBC(MyBatis 有两种事务管理类型,即JDBC、MANAGED),直接使用 JDBC 的提交和回滚功能,依赖于从数据源获得连接来管理事务的生命周期。
     3、dataSource 元素使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。 MyBatis 提供了三种数据源类型(UNPOOLED、POOLED、JNDI),这里我们使用 POOLED 数据源类型。该类型的实现利用 “池” 的概念将 JDBC 连接对象组织起来,避免了创建新的连接实例时所必需的初始化和认证时间,是 MyBatis 实现的简单的数据库连接池类型,它使数据库连接可被复用,不必在每次请求时都去创建一个物理连接。这对于高并发的 Web 应用是一种流行的处理方式,有利于快速响应请求。

 

5、mappers 元素
  mappers:映射器,在 <mappers> 中有两个子元素 <package> 、<mapper> ,用来定义 SQL 的映射语句,我们只需要告诉 MyBatis 去哪里找到这些 SQL 语句(即去哪里找相应的 SQL 映射文件),整个项目中可以有1个或多个SQL 映射文件。可以使用类资源路径或者 URL 等,具体代码如下:

  方式一:使用类资源路径获取资源(推荐使用)

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

mapper: mappers 的子元素节点,具体指定 SQL 映射文件的路径,其中 resource 属性的值表述了 SQL 映射文件的路径(类资源路径)。

  方式二:使用 URL 获取资源

  eclipse 查看文件 URL:右击要查看的文件   >>  Properties    >>   Resource   >>   右侧 Location  即为文件位置(复制粘贴路径即可)

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

  方式三:使用 <package> 获取资源

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

  方式四:<mapper class= "接口路径" >

<mappers>
  <mapper class="cn.mybatis.dao.ProviderMapper"/>
</mappers>
注意:
   1、这种方式必须保证接口名和 SQL 映射文件名相同,还必须在同一个包中。
   2、使用此方式对于接口方法使用注解方式来说,没有同包同名的限制条件。

MyBatis 的基本要素—核心配置文件的更多相关文章

  1. MyBatis基本要素---核心配置文件

    今天就简单的叙述下MyBatis的核心配置文件吧~~ configuration  配置 properties  可以配置在java属性配置文件中 settings   修改Mybatis在运行时的行 ...

  2. Mybatis的基本要素--核心对象

    大家好啊,今天呢来说下Mybatis的核心对象,也就是说基本三要素. >核心接口和类. >Mybatis核心配置文件(mybatis-config.xml) >SQL映射文件 一.下 ...

  3. MyBatis 的基本要素—核心对象

    MyBatis 三个基本要素   ➢ 核心接口和类 ➢ MyBatis 核心配置文件(mybatis-config.xml) ➢ SQL 映射文件(mapper.xml) MyBatis 核心接口和类 ...

  4. Mybatis配置解析(核心配置文件)

    4.配置解析 4.1.核心配置文件 Mybatis的配置文件包含了会深深影响mybatis行为的设置和属性信息 mybatis-config.xml properties(属性)重点 settings ...

  5. Mybatis笔记02-----MyBatis的核心配置文件以及模糊查询的实现

    认识MyBatis核心配置文件mybatis-config.xml 这个文件名是随意可以起,但为了规范一般都命名为mybatis-config.xml:配置文件与MyBatis的行为和属性信息息息相关 ...

  6. MyBatis学习总结(二)——MyBatis核心配置文件与输入输出映射

    在上一章中我们学习了<MyBatis学习总结(一)——ORM概要与MyBatis快速起步>,这一章主要是介绍MyBatis核心配置文件.使用接口+XML实现完整数据访问.输入参数映射与输出 ...

  7. MyBatis基础入门《五》核心配置文件

    MyBatis基础入门<五>核心配置文件 描述: 在前面的章节中,简单的学习使用了一下mybatis,对于配置文件没有过多详细说明. 这里先描述项目中的一个核心配置文件:mybatis-c ...

  8. MyBatis核心配置文件详解

    ------------------------siwuxie095                                     MyBatis 核心配置文件详解         1.核心 ...

  9. Mybatis(1、核心配置文件、Properties、Settings、typeAliases...)

    Mybatis(1.核心配置文件.Properties.Settings.typeAliases...) 2017年04月23日 22:52:36 阅读数:1527 此章主要介绍sqlMapConfi ...

随机推荐

  1. override (C# Reference)

    https://msdn.microsoft.com/en-us/library/ebca9ah3.aspx The override modifier is required to extend o ...

  2. 国产手机没有google services 和google play崩溃,判断google services是否存在

    public static boolean isGooglePlayServiceAvailable (Context context) { int status = GooglePlayServic ...

  3. bzoj3786

    splay维护dfs序 我们发现有移动子树这种操作,树剖是做不了了,又要实现子树加,lct又维护不了了,这时我们用splay维护入栈出栈序来支持这些操作.我们记录每个点的入栈时间和出栈时间,这样一个闭 ...

  4. [App Store Connect帮助]六、测试 Beta 版本(3.1)管理测试员:添加内部测试员

    您可以添加至多 25 个内部测试员(您的 App Store Connect 用户)使用“TestFlight Beta 版测试”来测试您的 App.在您上传了至少一个构建版本之后,才可添加测试员. ...

  5. 一个简陋的个人小项目,也是个人第一个真正意义上的独立项目——Graph

    由来 我最早接触到图这个概念是在大二的离散数学当中图论相关的内容,当时是以著名的哥尼斯堡七桥问题引出图论的概念,现在依然记忆犹新(不过只是记得这个名字,具体的解题思路我重新温习了一下才想起来),当时也 ...

  6. web自动化测试—selenium游览器多窗口操作

    # coding=utf-8'''web游览器多窗口操作: 获取当前窗口句柄 current_window_handle 获取所有窗口句柄 window_handles 切换窗口 switch_to_ ...

  7. 如何成为一名牛逼的C/C++程序员?

    每一个学技术的人 都想干个三五年就能成为大牛 跳槽去大厂,薪水翻番 或者在一个小公司里,带个小团队 在30岁左右成为项目经理 晋升管理层 买房买车,实现人生理想 然而技术之路漫漫 想要成为牛×的程序员 ...

  8. less新手入门(四)—— Mixin Guards

    八.Mixin Guards 有条件的 mixin 当您想要匹配表达式时,相对于简单的值或特性,Guards是有用的.如果您熟悉函数式编程,您可能已经遇到过它们. 为了尽可能地保持CSS的声明性质,在 ...

  9. 汇编程序49:实验14 访问CMOS RAM(显示系统时间)

    assume cs:code ;安装程序,使用指令out和in指令 code segment start: mov ax,cs mov ds,ax mov si,offset sub1 mov ax, ...

  10. web api 二

    接着上一回说,上回说到,web api有几种访问方式,具体有几种,我还真没去研究过,但是这里打算从get.post.put.delete四种请求方式分别谈谈基础类型(包括int/string/date ...