zoukankan      html  css  js  c++  java
  • mybatis源码阅读(动态代理)

    这一篇文章主要是记录Mybatis的动态代理学习成果,如果对源码感兴趣,可以看一下上篇文章  https://www.cnblogs.com/ChoviWu/p/10118051.html

    阅读本篇的读者应该都已经了解了用mapper调用xml下的内容是利用动态代理,本文将对这一部分的源码一探究竟

    我们都知道,spring用bean注入的方式是以代理的方式注入的,那么当mapper调用更下游的(xml)的服务的时候,这个操作是怎么运作的呢?

    在spring初始化bean的时候SqlsessionFactoryBean就已经把xml解析成mapper并储存在Configuration对象里,mapper下的所有接口都已经与xml的namespace匹配上,并且mapper注册为一个代理类

    如下图:

    将class的类作为key,所代理的对象作为value的HashMap数据结构存储

    想必看了这么一点点可能有一点理解了,那么我们都知道,JDK 动态代理只能代理接口,而且还需要定义实现类,那 mybatis 是如何做到不需要实现类就轻松获取到代理对象的呢?

    别急,看下方:

      当mapper全部都作为knownMappes的键值时,用户调用Mapper的时候,经过了如下步骤:

      

      看到这句想必就已经明白了!

      这种方式类似于截获了真正的代理对象,主要目的其实是将sqlSession以及代理对象传输到mapperMethod,

      而去执行其他的逻辑,通过MapperMethod实现数据库的访问操作

      如果该方法继承自Object(意味着该操作是一个对象操作而不是一个接口),

      如果是一个接口,将通过拿到的DefaultSqlSession执行该此操作

        

        这里面的操作都是对sqlSession对Executor的调用下执行的sql

  • 相关阅读:
    中科院大牛博士是如何进行文献检索和阅读(好习惯受益终生)(转载)
    大家平常都喜欢看哪些人的博客,共享…… ZZ (水木)
    heart ultrasound from american society of echocardiography
    用TWaver实现组合的Chart
    Hello TWaver Android
    关注细节-TWaver Android
    TWaver Java内存占用测试
    TWaver Android 概述
    机器学习中的相似性度量
    最大熵模型(一)
  • 原文地址:https://www.cnblogs.com/ChoviWu/p/10119744.html
Copyright © 2011-2022 走看看