MyBatis超详细介绍——XML配置

MyBatis XML配置

(本文做为学习笔记,了解更多请参考:MyBatis参考文档
  • Tip:
    若是属性在不仅一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:
    1. 在 properties 元素体内指定的属性首先被读取。
    2. 而后根据 properties 元素中的 resource 属性读取类路径下属性文件或根据 url 属性指定的路径读取属性文件,并覆盖已读取的同名属性。
    3. 最后读取做为方法参数传递的属性,并覆盖已读取的同名属性。

所以,经过方法参数传递的属性具备最高优先级,resource/url 属性中指定的配置文件次之,最低优先级的是 properties 属性中指定的属性。html

settings
  • 配置完整的settings元素的示例
<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="autoMappingBehavior" value="PARTIAL"/>
  <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
  <setting name="defaultExecutorType" value="SIMPLE"/>
  <setting name="defaultStatementTimeout" value="25"/>
  <setting name="defaultFetchSize" value="100"/>
  <setting name="safeRowBoundsEnabled" value="false"/>
  <setting name="mapUnderscoreToCamelCase" value="false"/>
  <setting name="localCacheScope" value="SESSION"/>
  <setting name="jdbcTypeForNull" value="OTHER"/>
  <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
typeAliases
  • 类型别名存在的意义仅在于用来减小类彻底限定名的冗余,例如:
<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>
  • 指定包名
<typeAliases>
  <package name="domain.blog"/>
</typeAliases>
  • 注解别名
@Alias("author")
public class Author {
    ...
}
配置环境(environments)
  • MyBatis能够配置成适应多种环境,可是每一个SqlSessionFactory实例只能选择其一,每一个数据库环境都须要对应一个SqlSessionFactory实例。能够将environment做为可选参数传递给SqlSessionFactoryBuilder。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, environment, properties);

当忽略环境参数的时候,默认环境将会被加载web

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader, properties);
  • XML文件配置环境
<environments default="development">
  <environment id="development">
    <transactionManager type="JDBC">
      <property name="..." value="..."/>
    </transactionManager>
    <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>
</environments>
事物管理器(transactionManager)

MyBatis中存在两种事物管理器(JDBC & MANAGED)数据库

  • JDBC
    直接使用JDBC的提交和回滚设置,依赖于从数据源获得的链接来管理事物做用域
  • MANAGED
    它几乎没作什么,从不提交或者回滚一个链接,而是让容器来管理事物的整个生命周期(好比JEE应用服务器的上下文),默认状况下会关闭链接,而一些容器不但愿这样,所以须要将closeConnection属性设置为false来阻止它默认的关闭行为
<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>
  • Tip
    若是使用了Spring + MyBatis,则不须要配置事物管理器,由于Spring会使用自带的管理器来覆盖配置
数据源(dataSource)
  • 三种内建的数据源类型(UNPOOLED & POOLED & JDNI)

UNPOOLED(每次被请求时打开和关闭链接)
属性设置:
driver – 这是 JDBC 驱动的 Java 类的彻底限定名(并非 JDBC 驱动中可能包含的数据源类)。
url – 这是数据库的 JDBC URL 地址。
username – 登陆数据库的用户名。
password – 登陆数据库的密码。
defaultTransactionIsolationLevel – 默认的链接事务隔离级别。缓存


POOLED(利用“池”的概念管理JDBC链接对象)
除上述属性设置以外,还存在如下设置:
poolMaximumActiveConnections – 在任意时间能够存在的活动(也就是正在使用)链接数量,默认值:10
poolMaximumIdleConnections – 任意时间可能存在的空闲链接数。
poolMaximumCheckoutTime – 在被强制返回以前,池中链接被检出(checked out)时间,默认值:20000 毫秒(即 20 秒)
poolTimeToWait – 这是一个底层设置,若是获取链接花费了至关长的时间,链接池会打印状态日志并从新尝试获取一个链接(避免在误配置的状况下一直安静的失败),默认值:20000 毫秒(即 20 秒)。
poolMaximumLocalBadConnectionTolerance – 这是一个关于坏链接容忍度的底层设置, 做用于每个尝试从缓存池获取链接的线程. 若是这个线程获取到的是一个坏的链接,那么这个数据源容许这个线程尝试从新获取一个新的链接,可是这个从新尝试的次数不该该超过 poolMaximumIdleConnections 与 poolMaximumLocalBadConnectionTolerance 之和。 默认值:3 (新增于 3.4.5)
poolPingQuery – 发送到数据库的侦测查询,用来检验链接是否正常工做并准备接受请求。默认是“NO PING QUERY SET”,这会致使多数数据库驱动失败时带有一个恰当的错误消息。
poolPingEnabled – 是否启用侦测查询。若开启,须要设置 poolPingQuery 属性为一个可执行的 SQL 语句(最好是一个速度很是快的 SQL 语句),默认值:false。
poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的频率。能够被设置为和数据库链接超时时间同样,来避免没必要要的侦测,默认值:0(即全部链接每一时刻都被侦测 — 固然仅当 poolPingEnabled 为 true 时适用)。bash


JNDI(为了能在如EJB等容器中使用)
initial_context – 这个属性用来在 InitialContext 中寻找上下文(即,initialContext.lookup(initial_context))。这是个可选属性,若是忽略,那么 data_source 属性将会直接从 InitialContext 中寻找。
data_source – 这是引用数据源实例位置的上下文的路径。提供了 initial_context 配置时会在其返回的上下文中进行查找,没有提供时则直接在 InitialContext 中查找。服务器

映射器(mappers)
  • 有如下几种方式告诉MyBatis去哪里找SQL映射文件
<!-- 使用相对于类路径的资源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用彻底限定资源定位符(URL) -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的彻底限定类名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
<!-- 将包内的映射器接口实现所有注册为映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>