MyBatis(2):config.xml文件
前言
前一篇文章,讲了MyBatis入门,讲到了MyBatis有两个基本的配置文件,一个用来配置环境信息,一个用来写SQL语句。前者我把它命名为config.xml,config.xml的内容是:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?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配置有关,用来减少类完全限定名的多于部分,例如:
|
1
2
3
4
5
6
7
8
|
<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拿出来看:
|
1
2
3
4
5
6
7
8
9
10
11
|
<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代码是:
|
1
2
|
reader = Resources.getResourceAsReader("config.xml");ssf = new SqlSessionFactoryBuilder().build(reader); |
SqlSessionFactoryBuilder的build方法实际上还有几个别的重载方法,其中一个重要的是:
|
1
2
3
|
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,例如:
123
<transactionManagertype="MANAGED"><propertyname="closeConnection"value="false"/></transactionManager><transactionManagertype="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引用的完全限定名,例如:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
// 使用相对于类路径的资源<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) |
一个完整的设置信息元素的示例配置如下:
|
1
2
3
4
5
6
7
8
9
10
|
<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的核心。
http://www.importnew.com/22789.html
MyBatis(2):config.xml文件的更多相关文章
- MyBatis2:config.xml文件
前言 前一篇文章,讲了MyBatis入门,讲到了MyBatis有两个基本的配置文件,一个用来配置环境信息,一个用来写SQL语句.前者我把它命名为config.xml,config.xml的内容是: & ...
- Android项目中的config.xml文件 “config.xml”
Android应用程序需要保存一些配置时,可以将这些配置项放置到values/config.xml文件中. 实例分析: <?xml version="1.0" encodin ...
- spring +springmvc+mybatis组合mybatis-config.xml文件配置
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configurationPUBLIC &q ...
- spring +springmvc+mybatis组合applicationContext.xml文件配置
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...
- Mybatis(一):MyBatis配置文件config.xml详解
MyBatis 配置文件基本结构 在使用mybatis框架时,首先导入其对应的jar包,并进行相应的配置,所以得对配置文件的每个参数都得了解.一个完全的mybatis配置文件结构如下: <?xm ...
- mybatis 热部署xml文件(spring boot和springmvc两种方式)
参考:http://thinkgem.iteye.com/blog/2304557 步骤:1.创建两个java类 (1)MapperRefresh.java :用于刷新mapper (2)SqlS ...
- 【MyBatis】Mapper XML 文件
Mapper XML文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立 ...
- 去掉IntelliJ IDEA 中 mybatis 对应的 xml 文件警告
https://blog.csdn.net/aubdiy/article/details/68485336 IntelliJ IDEA 打开 mybatis 的 xml 文件时,对应的 xml 文件中 ...
- Mybatis自动生成xml文件、dao接口、实体类
Mybatis可以通过逆向工程,实现自动生成xml文件.dao接口.实体类 以下使用的是Intellij Idea进行自动生成 一.首先,要在pom.xml中导入插件,在<build>中加 ...
随机推荐
- android pcm
Android.media package里包含声音录放的两个类AudioRecord和AudioTrack.前者用来录制,后者用来播放. 配置 pcm: int channel = AudioFor ...
- [Cocos2d-x For WP8]Layer 层
层(CCLayer) 从概念上说,层就是场景里的背景. CCLayer同样是CCNode的子类,通常用addChild方法添加子节点.CCLayer对象定义了可描绘的区域,定义了描绘的规则.C ...
- 常用SQL语句(工作)
1. 经销商 按店铺交易量汇总 ) from bp_shop_info i left join ( select t.shop_id,sum(t.shop_cost) as summary from ...
- python 面向对象 初级
面向对象 与 面向过程 面向对象对象,是根据某个对象,进行编写对象属性,不考虑对象以外的因素,只对对象本事的一些属于自己的属性进行创造,不用考虑 业务之间的逻辑. 面向过程, 是按照业务的一步步发展进 ...
- [转]关于event的两个常被忽略的api:isDefaultPrevented()和preventDefault()
今天在robert penner(as3 singal的作者)的一篇blog文中顺藤摸瓜到了darron schall的另外一篇blog文(Creating Default, Cancelable E ...
- 李洪强iOS经典面试题126
1.#import和#include的区别,@class代表什么? @class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import 而#import比起#inc ...
- [LintCode] Remove Linked List Elements 移除链表元素
Remove all elements from a linked list of integers that have value val. Have you met this question i ...
- CSS DIV 独占一行,清除左右两边的浮动
clear:both //表示清除左右两边浮动的层,自己独占一行
- SSH框架中新建立实体类后的配置
strut 层 public class Sellauthentication extends ActionSupport { private SellauthenticationService ...
- Spring的quartz定时器同一时刻重复执行二次的问题解决
最近用Spring的quartz定时器的时候,发现到时间后,任务总是重复执行两次,在tomcat或jboss下都如此. 打印出他们的hashcode,发现是不一样的,也就是说,在web容器启动的时候, ...