• mybatis源码(1)--------以xml配置方式实现对于数据的操作流程


    如图所示:这一行的代码主要是用于实现xml文件解析操作,对于mybatis核心xml文件的解析操作,以及里面的mapper.xml文件解析操作。

    如图所示表示对于mapper相关的xml文件进行解析操作

    如果所示会进行接口相关解析操作,并创建代理之后放入到一个map中,通解析mapper上面的注解sql语句或mapper相关xml文件中相关sql语句(注意:xml解析是放在了parser.parse操作)

    -------------------------------------------以上完成整个mybatis相关配置文件的加载过程

     如图根据之前创建完成sqlSessionFactory(即:DefaultSqlSessionFactory类对象)对象实现对于session对象的创建

     

    在事务下之创建一个session,注意这里的事务可以spring的事务相关结合,同时这里的session会创建一个Executor对象由它实现对于数据相关的核心操作

    所有的excutor实现类都实现了这个接口,注意这里的update方法,完成是对于数据的增,删,改操作的公用接口

    此处完成真正的mapper接口相关的代理对象的真正的创建即MapperProxyFactory实例对象

     

     以上将通过上述创建的mapper代理对象执行相关的sql操作

    通过PlainMethodInvoker对象,即一个方法执行的过程中就会一个对象,由此中的MapperMethod对象完成对于数据库的真正操作

     

     如图所示为MapperMethod中的核心方法的相关操作

    最终方法都是会走到Executor相关的实现类的,将获取的到数据放入到一级缓存中,如图所示

    需要注意的是如果是开启二级缓存的话那么会走CachingExecutor实现类这个,流程是先到二级缓存(基于命名空间的,即一个命名空间公用一个二级缓存区间)找,如果二级缓存中没有之后到BaseExecutor中,之后走一级缓存,如果一级缓存也没有那么将会走具体的sql语句执行的相关的查询语句操作

    ----------------------------------------------------那么mybatis是如何构建二级缓存的呢?下面将介绍其流程

     

    如图,即之前解析xml或者注解操作方法的时候(即:mapperElement(root.evalNode("mappers"));),同时也会对于二级缓存实现创建操作,此时完成对于每一个命名空间二级缓存的构建

    上面的方法是将会创建一个key,通过这个获取对应的命名空间的二级缓存的数据

    --------------------------------------------------------------------------------------------------mybatis二级缓存相关构建操作流程,我觉的二级缓存这一块设计的并怎样,原因在在于两点1.每次查询都会创建CacheExcutor对象之后再调用BaseExcutor,但是二级缓存大部分情况之下是没有开启的(默认情况之下也是)2.通过前面通过许多逻辑操作生成对应的CacheKey最后判断cache为空,这里不是应该一开始就判断二级缓存是否开启吗?

    大致讲了一些mybatis源码相关时候入门,但是不是适合深入研究.(推荐从它开始)

    https://www.cnblogs.com/xrq730/category/994185.html

    -------------------------------------------------------到此,mybatis最基本的xml配置方式工作流程图结束

  • 相关阅读:
    WCF中关于可靠会话的BUG!!
    控制并发访问的三道屏障: WCF限流(Throttling)体系探秘[下篇]
    《天使之恋》,一部重口味的纯美爱情电影
    一个关于解决序列化问题的编程技巧
    [转]Design Rules for ModelViewPresenter
    你知道Unity IoC Container是如何创建对象的吗?
    只在UnitTest和WebHost中的出现的关于LogicalCallContext的严重问题
    使命必达: 深入剖析WCF的可靠会话[原理揭秘篇](上)
    回调与并发: 通过实例剖析WCF基于ConcurrencyMode.Reentrant模式下的并发控制机制
    如何编写没有Try/Catch的程序
  • 原文地址:https://www.cnblogs.com/chaojibaidu/p/14968903.html
Copyright © 2020-2023  润新知