深远MyBatis配置文件

我们都清楚MyBatis的持久化操作离不开SqlSessionFactory对象,这一个目的是整整数据库映射关系经过编译后的内存镜像,该目的的openSession()方法可以打开SqlSession对象.该对象由由SqlSessionFactoryBuilder加载MyBatis的布置文件产生.

先贴一张MyBatis初阶化的主干历程,如下图:

上图所示,MyBatis起初化要透过以下几步:

  1. 调用SqlSessionFactoryBuilder对象的build(inputStream)方法;
  2. SqlSessionFactoryBuilder会遵照输入流inputStream等音讯成立XMLConfigBuilder对象;
  3. SqlSessionFactoryBuilder调用XMLConfigBuilder对象的parse()方法;
  4. XMLConfiguBuilder对象解析XML配置文件重返Configuration对象;
  5. SqlSessionFactoryBuilder根据Configuration对象创设一个DefaultSessionFactory对象;
  6. SqlSessionFactoryBuilder返回DefaultSessionFactory目的给客户端,供客户端调用;

有鉴于此,SqlSessionFactory是遵照MyBatis的配备文件mybatis-config.xml创办的,接下去大家就来第一研究下MyBatis配置文件中常用属性的意义.

MyBatis的配置文件结构

MyBatis的安排文件包含了震慑MyBatis行为的音讯,文档的协会如下:
顶层configuration配置

  • properties 属性
  • settings 设置
  • typeAliases 类型命名
  • typeHandlers 类型处理器
  • objectFactory 对象工厂
  • plugins 插件
  • environments 环境
    • environment 环境变量
      • transactionManager 事务管理器
      • dataSource 数据源
  • databaseIdProvider 数据库厂商标识
  • mappers 映射器

properties属性

那个属性都是可外部配置且可动态替换的,既可以在第超级的Java属性文件中配备,亦可通过properties元素的子元向来传递.

能够再CLASSPATH中追加一个db.properties的Java属性文件.

driver=oracle.jdbc.driver.OracleDriver
ur=jdbc:oracle:thin:@127.0.0.1:1526:mybatis
username=root
password=root

在配置文件中配置<properties…/>属性:
<properties resource=”db.properties”/>
内部的性质就可以在全体配置文件中应用来替换需要动态配置的特性值.

 <dataSource type="POOLED">
   <property name="driver" value="${driver}"/>
   <property name="url" value="${url}"/>
   <property name="username" value="${username}"/>
   <property name="password" value="${password}"/>
 </dataSource>

settings设置

一个配置完成的settings元素示例如下,具体意思这里不再列举,可以自行google.

typeAliases 类型命名

类型别名是为Java类型设置的一个短的名字.它只和XML配置有关,存在的意思仅在于用来压缩类完全限定名的冗余.

<typeAliases>
  <typeAlias alias="user" type="org.ccgogoing.domian.User"/>
</typeAliases>

当这么安排时,user可以用在任何利用org.ccgogoing.domain.User的地点.
也得以指定一个包名,MyBatis会在包名下边搜索需要的Java Bean

<typeAliases>
  <package name="org.ccgogoing.domian"/>
</typeAliases>

每一个在包org.ccgogoing.domain中的Java
Bean,在从来不阐明的景色下,会使用Bean的首字母小写的非限定类名来作为它的别名.比如org.ccgogoing.domain.User的别名为user,若有注脚,则别名为其讲明值.

@Alias("user")
public class User {
    ...
}

typeHandlers 类型处理器

随便MyBatis在预处理语句(preparedStatement)中设置一个参数时,依然从结果集中取出一个值时,都会用类型处理器将拿到的值以适当的不二法门转换成Java类型,下图描述了有的默认的类别处理器.

objectFactory 对象工厂

MyBatis每一遍创造结果对象的新实例时,它都会拔取一个对象工厂(ObjectFactory)实例来形成.默认的靶子工厂急需做的然而是实例化目的类,要么通过默认构造方法,要买在参数映射存在的时候经过参数构造方法来实例化.假若想覆盖对象工厂的默认行为,则足以经过成立自己的目标工厂来实现.

environments 配置环境

MyBatis的条件布置实际就是数据源的配置.MyBatis可以配备多种环境,这种体制使得MyBatis能够将SQL映射应用于多种数据库中.例如,开发,测试盒生产环境需要不同的布局;六个生产数据库想使用同一的sql映射,等等.

即使可以配备三个环境,不过各样SqlSessionFactory实例只可以接纳一个条件,即每个数据库对应一个SqlSessionFactory实例.所以假若你想连接六个数据库,就需要成立五个SqlSessionFactory实例,每个数据库对应一个.

环境布置示范如下:

    <environments default="development">
        <environment id="development">
            <!--指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- dateSource指定数据源配置,POOLED是jdbc连接对象的数据源连接池的实现-->
            <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>

默认的环境ID(default=”development”);
各类environment元素定义的环境ID(比如,id=”development”).
条件ID可以随便命名,提出简洁有意义,而默认环境一定要配合定义的内部一个条件ID.
<transactionManager…/>表示事务管理配置,在MyBatis中有JDBCMANAGED两中项目标作业管理器:

  • JDBC.那些布局就是直接行使了JDBC的付出和回滚设置,它凭借于从数据源得到的总是来保管工作范围.
  • MANAGED.
    这么些布局几乎没做什么.它从不提交或回滚一个总是,而是让容器来保管事务的总体生命周期(比如JAVAEE应用服务器的上下文).默认境况下它会倒闭连接,可是部分容器并不期待这样,可以将closeConnection属性设置为false来阻止它的默认关闭行为.

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

提拔:
倘若开发使用Spring+MyBatis,则并未必要配置事务管理器,因为Spring模块会使用自带的管理器来覆盖后边的配置.

<dataSource…/>表示数据源配置,在MyBatis中有UNPOOLED、POOLED和JNDI二种多少源类型:

  • UNPOOLED.这几个数据源的实现只是每便被呼吁时打开和关闭连接。它对尚未性能要求的简约应用程序是一个很好的挑三拣四。不同的数据库在这方面展现也是不相同的。
    UNPOOLED类型的数据源仅仅需要配备一下5种特性:
    drive、url、username、password、defaultTransactionIsolationLevel。默认的连年事务隔离级别。

  • POOLED:那种数据源的落实应用“池”的定义将JDBC连接对想社团起来,避免了创建新的连年实例时所必需的初叶化时间和表达时间。那是一种使得并发Web应用急速响应请求的流行处理情势,除了上述提到的UNPOOLED的5中属性外,还足以利用更多的性质来配置POOLED的数据源:

    • pool马克斯(Max)imumActiveConnections.在随意时间可以存在的移动(也就是正值使用)连接数量,默认值是10.
    • pool马克斯(Max)imumIdleConnections.任意时间或者存在的闲暇连接数.
    • pool马克斯(Max)imunCheckout提姆e.在被胁迫再次回到此前,池中连续被检出时间,默认值为20000毫秒(即20秒).
    • pool提姆eToWait.那是一个平底设置,要是拿到连接花费一定长的光阴,它会给连接池打印状态日志并再一次尝试得到一个接连(制止在误配置的状况下直接平静地失败),默认值为20000毫秒(20秒).
    • poolPingQuery.发送到数据库的侦测查询,用来检查连接是否处于正在工作秩序中并预备接受请求.默认是”NO
      PING QUERY
      SET”,这会促成大部分数据库驱动战败时饱含一个确切的谬误信息.
    • poolPingEnabled.是否启用侦测查询.若开启,也不可能不运用一个可实施的sql语句设置poolPingQuery属性(最好是一个可怜快的sql),默认值为false.
    • poolPingConnectionsNotUsedFor.配置poolPingQuery的使用频度.这足以被设置成匹配具体的数据库连接超时时间,来避免不必要的侦测,默认值为0(即怀有连接每一随时都被侦测,当然仅当poolPingEnabled为true时适用).
  • JNDI.那个数据源的实现是为了能在如EJB或应用服务器这类容器中应用,容器可以集中或在外表配置数据源,然后放置一个JNDI上下文的引用.那种数据源配置只需要六个特性如下图所示:

mapper 映射器

MyBatis需要开发者自己写sql语句,mapper映射器正是告诉MyBatis到哪个地方去找映射文件,进而找到这一个sql语句.实际付出中得以运用相对于类路径的资源引用或完全限定资源定位符(包括file:///的URL),以及类名和包名等,例如:

    <!-- 使用类路径查找资源文件 -->
    <mappers>
        <mapper resource="com/ccgogoing/fileupload/mapper/sqlmap-mapping-user.xml"/>
    </mappers>
    <!-- 使用本地文件 -->
    <mappers>
        <mapper url="file:///C:/mapper/UserMapper.xml">
    </mappers>
    <!-- 使用接口类 -->
    <mappers>
        <mapper class="org.ccgogoing.mapper.UserMapper"
    </mappers>
    <!-- 使用包名 -->
    <mappers>
        <package name="org.ccgogoing.mapper"/>
    </mappers>

mapper映射器会告知MyBatis去啥地方找映射文件,剩下的底细就是每个SQL映射文件了,我会在接下去的作品中详细表明这一部分知识.

网站地图xml地图