MyBatis:2
转载:http://www.cnblogs.com/xrq730/p/5256221.html
前言
前一篇文章,讲了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的核心。
MyBatis:2的更多相关文章
- 【分享】标准springMVC+mybatis项目maven搭建最精简教程
文章由来:公司有个实习同学需要做毕业设计,不会搭建环境,我就代劳了,顺便分享给刚入门的小伙伴,我是自学的JAVA,所以我懂的.... (大图直接观看显示很模糊,请在图片上点击右键然后在新窗口打开看) ...
- Java MyBatis 插入数据库返回主键
最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User ...
- [原创]mybatis中整合ehcache缓存框架的使用
mybatis整合ehcache缓存框架的使用 mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓 ...
- 【SSM框架】Spring + Springmvc + Mybatis 基本框架搭建集成教程
本文将讲解SSM框架的基本搭建集成,并有一个简单demo案例 说明:1.本文暂未使用maven集成,jar包需要手动导入. 2.本文为基础教程,大神切勿见笑. 3.如果对您学习有帮助,欢迎各种转载,注 ...
- mybatis plugins实现项目【全局】读写分离
在之前的文章中讲述过数据库主从同步和通过注解来为部分方法切换数据源实现读写分离 注解实现读写分离: http://www.cnblogs.com/xiaochangwei/p/4961807.html ...
- MyBatis基础入门--知识点总结
对原生态jdbc程序的问题总结 下面是一个传统的jdbc连接oracle数据库的标准代码: public static void main(String[] args) throws Exceptio ...
- Mybatis XML配置
Mybatis常用带有禁用缓存的XML配置 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ...
- MyBatis源码分析(一)开篇
源码学习的好处不用多说,Mybatis源码量少.逻辑简单,将写个系列文章来学习. SqlSession Mybatis的使用入口位于org.apache.ibatis.session包中的SqlSes ...
- (整理)MyBatis入门教程(一)
本文转载: http://www.cnblogs.com/hellokitty1/p/5216025.html#3591383 本人文笔不行,根据上面博客内容引导,自己整理了一些东西 首先给大家推荐几 ...
- MyBatis6:MyBatis集成Spring事物管理(下篇)
前言 前一篇文章<MyBatis5:MyBatis集成Spring事物管理(上篇)>复习了MyBatis的基本使用以及使用Spring管理MyBatis的事物的做法,本文的目的是在这个的基 ...
随机推荐
- Tomcat8.5 升级tomcat版本导致出现异常,Base64不存在
Tomcat8.5 升级tomcat版本导致出现异常,Base64不存在 原因分析: 由于tomcat由7升级到8.5导致Base64的引用路径错误,默认引用为8.5中的jar, 解决方案: 修改引用 ...
- vc++引用外部dll时报error LNK2019: 无法解析的外部符号
初学cpp,因为之前装linux下各种软件的时候,知道LD_LIBRARY_PATH可以指定动态库的目录.今天在vc集成log4cpp的时候,编译main时报error LNK2019: 无法解析的外 ...
- c++的友元类、方法及其益处
在java中,我们知道除了public和private,protected外,还有默认的包可见性访问级别,虽然如此,很多时候出于早期设计缺陷的原因,我们需要访问一些包或者protected可见性级别的 ...
- 01: awk常用
1.1 awk基本使用 1.找出当前登录用户数量 [root@localhost ~]# w 14:09:07 up 48 min, 2 users, load average: 0.00, 0.01 ...
- Python3基础 file open+write 对不存在的txt进行创建与写入
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- mips32和x86下的大小端模式判定
一.背景 1.1 mips32搭载32bit vxworks操作系统 1.2 x86搭载64bit windows10操作系统 二.大小端模式判定前的准备 2.1 先要知道各种架构上各种整型数占据的b ...
- AtCoder Tenka1 Programmer Beginner Contest 解题报告
赛时写了ABC,D实在没啥思路,然后C又难调...然后就从写完AB时的32名掉到了150+名 T_T 码力不够,思维不行,我还是AFO吧 比赛链接 A - Measure sb模拟,奇数串倒着输出偶数 ...
- 马尔科夫随机场模型(MRF-Markov Random Field)
原文: http://blog.sina.com.cn/s/blog_92c398b00102vs3q.html 马尔科夫过程 隐马尔科夫过程 与马尔科夫相比,隐马尔可夫模型则是双重随机过程,不 ...
- NOI 08 石头剪刀布
石头剪刀布(NOI 08) 总时间限制: 1000ms 内存限制: 65536kB 描述 石头剪刀布是常见的猜拳游戏.石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负. 一天,小A和小B ...
- Jmeter 处理Unicode编码转为中文
对于接口中返回报文,有的接口返回信息是Unicode编码,写断言的时候,要么就Response Assertion就写成Unicode编码的断言,如下图: 真心不觉得返回报文加密能有多安全,别人将报文 ...