zoukankan      html  css  js  c++  java
  • Mybatis运行原理

      要执行sql语句必须得到一个SqlSession,那么我们是怎么获得这个对象的呢?我们来慢慢解析这几句话:

      第一步:通过Resources加载配置好的mybatis.xml配置文件。Resources是ibatis.io包下面的类,也就是一个io流,用于读写文件,通过getResourceAsStream把xml文件加载进来,降配置文件解析为一个流。

      第二步:然后看第二句话,这句话是关键。我们首先new了一个SqlSessionFactoryBuilder对象,他是SqlSessionFactory的构建者。我们调用了他的build()方法。这个方法长什么样子呢?看一下他的源码:

    我们发现里面有一个XMLconfigBuilder对象,他是做什么的呢?他是用来解析XML文件的一个构建者,通过他的parse()方法解析xml文件

    然后我们发现解析完成后,他返回了一个configuration对象,它是用来存放mybatis核心配置文件解析完成后的结果。这个configuration又返回给谁了呢?继续看源码:

    他又返回了一个build方法,把刚才的返回值configuration作为参数传入这个方法中,并返回了一个DefaultSqlSessionFactory对象,这是SqlSessionFactory的实现类,用来生产defaultSqlSession对象。这样上面的第二句话才算真正的结束了。。。

     这时候会不会有的小伙伴疑惑,为什么既然DefaultSqlSessionFactory是SqlSessionFactory的实现类,为什么我们不直接new一个defaultSqlSessionFactory呢?原因:看源码知道,如果new defaultSqlSessionFactory的话,我们需要一个configuration对象,而这个对象有事经过层层磨难才得到的,所有我们一般采取构建筑模式,直接把xml字节流或字符流给了sqlSessionfactoryBuilder就好了,我们就不用管他是怎么生成的了。

    第三步:我们继续往下走,我们最终的目的是获取一个SqlSession对象,现在我们有了一个SqlSessionFactory了,就愉快的生成SqlSession吧。从第三句看,调用了openSession()方法,这又是个啥?看源码:

    先看到返回值是sqlSession,再看看里面有些什么:

       Transaction,这很明显是一个事务,我们都知道sql执行时都要涉及到事务操作的,提交或回滚什么的。而这个transaction产生需要什么参数呢,看源码知道里面有个environment(xml中配置的),而且是从configuration中获得的(之前做的总算没有白费),通过这些参数transactionFactory就帮我们产生了transaction。

      executor,这个名字一看就知道是一个执行器,是个接口(一般用simpleExecutor来执行,实现类),他是mybatis的核心执行器,相当于jdbc中的statement,发送sql语句并执行。

      有了这些我们就能得到最后的sqlSession了,就可以该干嘛干嘛了。

    总结一下:mybatis运行时要先通过resources把核心配置文件也就是mybatis.xml文件加载进来,然后通过xmlConfigBulider来解析,解析完成后把结果放入configuration中,并把它作为参数传入到build()方法中,并返回一个defaultSQLSessionFactory。我们再调用openSession()方法,来获取SqlSession,在构建SqlSession的同时还需要transaction和executor用于后续执行操作。

  • 相关阅读:
    hdu 5446 Unknown Treasure lucas和CRT
    Hdu 5444 Elven Postman dfs
    hdu 5443 The Water Problem 线段树
    hdu 5442 Favorite Donut 后缀数组
    hdu 5441 Travel 离线带权并查集
    hdu 5438 Ponds 拓扑排序
    hdu 5437 Alisha’s Party 优先队列
    HDU 5433 Xiao Ming climbing dp
    hdu 5432 Pyramid Split 二分
    Codeforces Round #319 (Div. 1) B. Invariance of Tree 构造
  • 原文地址:https://www.cnblogs.com/novalist/p/7884884.html
Copyright © 2011-2022 走看看