MyBatis-SQLSessionFactory 配置文件解析
SQLSessionFactory 配置文件解析
在入门文章里,配置了两个 xml 文件,本文来解析 SQLSessionFactory 的环境配置文件。在前文中命名未 conf.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>
<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?useSSL=true"/>
<property name="username" value="root"/>
<property name="password" value="admin"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="userMapper.xml" />
</mappers>
</configuration>
下面来解析一下 <configuration></configuration> 里面的一些内容。
environments
MyBatis可以配置多种环境,这会帮助你将 SQL 映射应用于多种数据库之中。例如测试和生产环境。或者你可能有多重生产级数据库却共享相同的模式,所以你会想到对不同数据库使用相同的SQL映射。
但是配置多种环境,只能为每个SqlSessionFactory实例选择一个。
我们之前在文中加载环境配置文件的方法是:
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
其实该 build 有其他的重载方法。其中有配置环境参数的方法
public SqlSessionFactory build(InputStream inputStream, String environment) {
return this.build((InputStream)inputStream, environment, (Properties)null);
}
即传入 environment ,指定的 environment 被绑定到 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”):
2.1 UNPOOLED
这个数据源的实现是每次被请求时打开和关闭连接。它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接,不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的。UNPOOLED 类型的数据源仅仅用来配置以下六种属性:
- driver—-这是JDBC驱动的Java类的完全限定名
- url—-这是数据库的JDBC URL地址
- username—-登陆数据库的用户名
- password—-登录数据库的密码
- defaultTransactionIsolationLevel—-默认的连接事物隔离级别
- driver.encoding—-传递数据库驱动的属性,前缀以”driver.”开头即可,”driver.encoding”表示的就是传递 encoding 属性
2.2 POOLED
这是 JDBC 连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的连接和认证时间。这是一种当前 Web 应用程序用来快速响应请求的很流行的方法。除了上述(UNPOOLED)的属性之外,还有些别的属性可以用来配置 POOLED 数据源:
- poolMaximumActiveConnections—-在任意时间存在的活动(也就是正在使用)连接的数量,默认值为10
- poolMaximumIdleConnections—-任意时间存在的空闲连接数
- poolMaximumCheckoutTime—-在被强制返回之前,池中连接被检查的时间,默认值为2000毫秒也就是20秒
- poolTimeToWait、poolPingQuery、poolPingEnabled、poolPingConnectionsNotUsedFor—-这些都是一些侦测数据库连接的属性
2.3 JNDI
这个数据源的实现是为了使用如 Spring 或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用。这个数据源只需要两个属性:
- initial_context—-从初始上下文寻找环境,这个是可选属性,如果被忽略,那么 data_source 属性将会直接以 initialContext 为背景再次寻找
- data_source—-这是引用数据源实例位置的上下文路径,它会以由 initial_context 查询返回的环境为背景来查找,如果 initial_context 没有返回结果时,直接以初始上下文为环境来查找
和其它数据源配置相似,它也可以通过名为”env.”的前缀直接向初始上下文发送属性。
3 mappers
MyBatis 的行为已经由上述元素配置好,下面是告诉 MyBatis 到哪里找到 SQL 的映射文件。可以通过使用相对路径的资源引用,或者字符表示,或者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>
4 settings
下面多讲一个属性,这个属性可以不在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>
主要的配置信息就是上面这些,前三个比较重要,settings 属于高级设置.
转载于:https://www.jianshu.com/p/2a2986f0b60c