俺们且晓得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的数据源:

    • poolMaximumActiveConnections.在肆意时间可是的动(也便是正在使用)连接数量,默认值是10.
    • poolMaximumIdleConnections.任意时间或者有的空连接数.
    • poolMaximunCheckoutTime.在为强制返回之前,池中连续为验证出时间,默认值为20000毫秒(即20秒).
    • poolTimeToWait.这是一个底装,如果获连接花费一定长之时刻,它见面被连接池打印状态日志并再次尝试取一个接连(避免以无形中配置的气象下直接平静地砸),默认值为20000毫秒(20秒).
    • poolPingQuery.发送至数据库的侦测查询,用来视察连接是否处在正在干活秩序被连准备接受请求.默认是”NO
      PING QUERY
      SET”,这会招致大多数数据库让失败时噙一个相宜的失实消息.
    • poolPingEnabled.是否启用侦测查询.若被,也非得以一个而实施的sql语句设置poolPingQuery属性(最好是一个深急匆匆的sqlXML),默认值为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地图