MyBatis2:config.xml文件

前言

前一篇文章,讲了MyBatis入门,讲到了MyBatis有两个基本的配置文件,一个用来配置环境信息,一个用来写SQL语句。前者我把它命名为config.xml,config.xml的内容是:

<?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>
    <typeAliases>
        <typeAlias alias="Student" type="com.xrq.domain.Student"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/test"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <mapper resource="student.xml"/>
    </mappers>
</configuration>

这是一个最基本的配置写法,一般使用MyBatis都可以在这个配置文件的基础上进行修改加以扩展,本文就学习一下config.xml文件<configuration></configuration>里面的一些内容。

typeAliases

这个标签倒不关键,但是有这个标签之后整体使用MyBatis就会很方便。typeAliases是为Java类型命名一个短的名字,它只和XML配置有关,用来减少类完全限定名的多于部分,例如:

<typeAliases>
    <typeAlias alias="Author" type="domain.blog.Author"/>
    <typeAlias alias="Blog" type="domain.blog.Blog"/>
    <typeAlias alias="Comment" type="domain.blog.Comment"/>
    <typeAlias alias="Post" type="domain.blog.Post"/>
    <typeAlias alias="Section" type="domain.blog.Section"/>
    <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>

有了这个配置,"Blog"可以任意用来代替"domain.blog.Blog"所使用的地方。

environments

MyBatis可以配置多种环境,这会帮助你将SQL映射应用于多种数据库之中。例如,你也许为开发要设置不同的配置,测试和生产环境。或者你可能有多重生产级数据库却共享相同的模式,所以你会想到对不同数据库使用相同的SQL映射。这种用法是最多的。

有一个很重要的问题是:你可以配置多种环境,但你只能为每个SqlSessionFactory实例选择一个

所以,如果你想连接两个数据库,那么就需要创建两个SqlSessionFactory实例,每个数据库对应一个。而如果是三个数据库,你就需要三个实例,以此类推。我们把前面的environments拿出来看:

<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="com.mysql.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/test"/>
            <property name="username" value="root"/>
            <property name="password" value="root"/>
        </dataSource>
    </environment>
</environments>

而对应的Java代码是:

reader = Resources.getResourceAsReader("config.xml");
ssf = new SqlSessionFactoryBuilder().build(reader);

SqlSessionFactoryBuilder的build方法实际上还有几个别的重载方法,其中一个重要的是:

public SqlSessionFactory build(Reader reader, String environment) {
    return build(reader, environment, null);
}

原则是:如果传入environment,指定的envrionment被绑定到SqlSessionFactory;如果不传入environment,default指定的environment被绑定到SqlSessionFactory

接着来看一下环境元素:

1、transactionManager

在MyBatis中有两种事物管理器类型,一种是JDBC,一种是MANAGED。

  • JDBC----这个配置直接简单使用了JDBC的提交和回滚设置,它依赖于数据源得到的连接来管理事物范围
  • MANAGED----这个配置几乎不做什么。它从来不提交或回滚一个连接,而它会让容器来管理事物的整个生命周期(比如Spring或J2EE应用服务器的上下文),默认情况下它会关闭连接,然而一些容器并不希望这丫昂,因此如果你需要从连接中停止它,将closeConnection属性设置为false,例如:

    <transactionManager type="MANAGED">
        <property name="closeConnection" value="false"/>
    </transactionManager><transactionManager type="MANAGED">

2、dataSource

dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。许多MyBatis的应用程序将会按照上面的示例来配置数据源,然而它并不是必须的,要知道为了方便使用使用延迟加载,数据源才是必须的。有三种内建的数据源类型(也就是type="XXX"):

(1)UNPOOLED

这个数据源的实现是每次被请求时打开和关闭连接。它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接,不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的。UNPOOLED类型的数据源仅仅用来配置以下六种属性:

  • driver----这是JDBC驱动的Java类的完全限定名
  • url----这是数据库的JDBC URL地址
  • username----登陆数据库的用户名
  • password----登录数据库的密码
  • defaultTransactionIsolationLevel----默认的连接事物隔离级别
  • driver.encoding----传递数据库驱动的属性,前缀以"driver."开头即可,"driver.encoding"表示的就是传递encoding属性

(2)POOLED

这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的连接和认证时间。这是一种当前Web应用程序用来快速响应请求的很流行的方法。除了上述(UNPOOLED)的属性之外,还有些别的属性可以用来配置POOLED数据源:

  • poolMaximumActiveConnections----在任意时间存在的活动(也就是正在使用)连接的数量,默认值为10
  • poolMaximumIdleConnections----任意时间存在的空闲连接数
  • poolMaximumCheckoutTime----在被强制返回之前,池中连接被检查的时间,默认值为2000毫秒也就是20秒
  • poolTimeToWait、poolPingQuery、poolPingEnabled、poolPingConnectionsNotUsedFor----这些都是一些侦测数据库连接的属性

(3)JNDI

这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。这个数据源只需要两个属性:

  • initial_context----这个属性用来从初始上下文寻找环境,这个是可选属性,如果被忽略,那么data_source属性将会直接以initialContext为背景再次寻找
  • data_source----这是引用数据源实例位置的上下文路径,它会以由initial_context查询返回的环境为背景来查找,如果initial_context没有返回结果时,直接以初始上下文为环境来查找

和其它数据源配置想死,它也可以通过名为"env."的前缀直接向初始上下文发送属性。

mappers

既然MyBatis的行为已经由上述元素配置完了,那么下面就要定义SQL映射语句了,但是首先我们要告诉MyBatis到哪里去寻找这些语句。Java在这方面没有提供一个很好的方法,所以最佳方式是告诉MyBatis去哪里找映射文件,可以通过使用相对路径的资源引用,或者字符表示,或者url引用的完全限定名,例如:

// 使用相对于类路径的资源
<mappers>
    <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
    <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
    <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
// 使用完全限定路径
<mappers>
    <mapper url="file:///var/sqlmaps/AuthorMapper.xml"/>
    <mapper url="file:///var/sqlmaps/BlogMapper.xml"/>
    <mapper url="file:///var/sqlmaps/PostMapper.xml"/>
</mappers>

这些语句简单告诉了MyBatis去哪里找映射文件,其余的细节就是在每个SQL映射文件中了,将在下面的文章中探讨。

settings

前面几个都是config.xml里面出现的,下面多讲一个属性,这个属性可以不在config.xml中出现,但是比较重要,写在这里为了以后可以看。

这个属性是settings,是非常重要的调整,它们会改变MyBatis在运行时的行为方式。这面这个表格描述了设置信息,它们的含义和默认值:

参数设置 描述 有效值 默认值
cachedEnabled 用于配置使全局的映射器启用或禁止缓存 true|false
true

lazyLoadingEnabled 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载 true|false true
aggressiveLazyLoading 当启用时,有延迟加载属性的对象在被调用时将会完全加载任任意属性,否则每种属性将会按需要加载 true|false true
multipleResultSetsEnabled 允许或不允许多种结果集从一个单独的语句中返回(需要合适的驱动) true|false true
useColumnLabel 使用列标签代替列名。不同的驱动在这方面表现不同,参考驱动文档或充分测试两种方法来决定所使用的驱动 true|false true
useGeneratedKeys 允许JDBC支持生成的键,需要合适的驱动。如果设置为true则这个驱动强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效。 true|false true
autoMappingBehavior 指定MyBatis如何自动映射列到字段/属性PARTIAL只会自动映射简单、没有嵌套的结果。FULL会自动映射任意复杂的结果。 NONE|PARTIAL|FULL PARTIAL
defaultExecutorType 配置默认的执行器。SIMPLE执行器没有什么特别之处,REUSE执行器重用预处理语句,BATCH执行器重用语句和批量更新。 SIMPLE|REUSE|BATCH SIMPLE
defaultStatementTimeout 设置超时时间,它决定驱动等待一个数据库响应的时间。 任何正整数 Not Set(null)

一个完整的设置信息元素的示例配置如下:

<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="enhancementEnabled" value="false"/>
    <setting name="defaultExecutorType" value="SIMPLE"/>
    <setting name="defaultStatementTimeout" value="25000"/>
</settings>

config.xml主要的配置信息差不多就是上面这一些,前三个比较重要,settings属于高级设置了,需要比较有经验的开发来依据项目情况做调整。

后面的一篇文章将探讨SQL语句的映射,这也是MyBatis的核心。

时间: 2024-11-05 06:26:42

MyBatis2:config.xml文件的相关文章

Android项目中的config.xml文件 “config.xml”

Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encoding="utf-8"?> <!-- /* ** Copyright 2009, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "Lice

解析ASP,NET MVC 中 web.config XML文件 取出数据库类型

/// <summary> /// 解析web.config 查询dbType类型 /// </summary> private static void SetDBType() { #region 解析web.config 查询dbType类型 string strPath = HttpContext.Current.Server.MapPath("/") + "Web.config"; XmlDocument doc = new XmlDo

winform App.Config XML文件的读取和修改

模板图 后台代码: 用XMLDocument方法来实现 private void ServerDialog_Load(object sender, EventArgs e) { //txtServerIP.Text= ConfigurationManager.AppSettings["PowerServerIP"]; //txtPort.Text = ConfigurationManager.AppSettings["PowerServerPort"]; try {

初学DOM树解析xml文件

做了一次设计模式实验的题目: 某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录.短信.照片.歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中.在实现过程中需要与多个已有的类进行交互,例如通讯录管理类.短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能. 我自己在这道题目中构建了MMC,SD继承了abstract class的AbstractCard类,这样方便以后继续增加外接卡 对于通信录.短

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

使用Spring读取xml文件中的配置信息

一般写程序时我们都会将一些配置信息写到配置文件中,以便在不修改源码的情况下对程序的某些点进行更改.这里介绍一种Spring读取xml配置文件的方式,其基本思路如下:定义一个java类,其中定义一些静态变量对应我们的配置信息,然后采用注入的方式将变量值初始化为配置值.示例代码如下: 新建一个java类: package java; public class Config { //要配置的值 public static int value = 0; //这里不能写成静态的 public void s

Java+XSL合并多个XML文件

使用 Java 解析 XML 文件有许多成熟的工具,如 dom4j 等等.但在一些场景中,我们可能使用 Ant.Maven 等构建工具对多个 XML 文件进行合并,我们希望可以直接通过脚本文件,或者简单的程序就能完成这样的功能,那么使用 XSL 是一个非常不错的选择.本文将介绍通过简单的 Java 程序加上 XSL 文件来完成多个 XML 文件的合并操作.(XSL 是一种样式表语言,可用以描述如何显示一个 XML 文件) 背景: Config.xml 文件的结构与 FinalConfig.xml

Cordova 3.x 基础(5) -- 配置文件config.xml

原文:http://rensanning.iteye.com/blog/2019331 首先要注意的是:从3.3版本以后已经把www/config.xml移动到了根目录下. 在config.xml中定义的东西应该适应所有平台.在build工程的是时候,会看到“Generating config.xml from defaults for platform "android"”这样的字样,他会生成各个平台的config.xml. 生成的文件: Android:MyProject/plat

Visual Studio中xml文件使用app.config、web.config等的智能提示的方法

在.Net开发的过程中,有时我们需要使用Xml文件作为配置文件(基于某些情况的考虑),而不是app.config.web.config这种,但是我们在xml中配置时希望可以增加类似编辑app.confg.web.config文件时的智能提示. 没有作特殊配置时,编写xml文件如下: 从上图可以看到,没有智能提示.但是我们编辑app.config.web.config时有智能提示,比如上面的configuration,我们可能只要输入前面几个字母就会弹出智能提示,然后可以直接从下来中选择.如下图: