zoukankan      html  css  js  c++  java
  • (五)myBatis架构以及SQlSessionFactory,SqlSession,通过代理执行crud源码分析---待更

    MyBatis架构

    首先MyBatis大致上可以分为四层:

    1.接口层:这个比较容易理解,就是指MyBatis暴露给我们的各种方法,配置,可以理解为你import进来的各种类。,告诉用户你可以干什么

    2.数据处理层:顾名思义对数据的处理,当接收到一个sql语句时,比如 selecr *from person where id=#{id};  会进行这四步:参数处理---sql解析---sql执行----处理结果,这里我们重点关心sql的执行

    3.框架支撑层:一些辅助操作,缓存机制,事务管理,连接池等,

    4.引导层:有了上面三层之后,告诉用户到底是通过哪一种方式来执行mybatis,即sql语句的执行方式,xml配置,注释配置等

    源码分析:

    从MyBatis的执行步骤入手,首先看下面代码:

          Reader reader = Resources.getResourceAsReader("config.xml");
            //connection
            SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
            SqlSession sqlSession = sessionFactory.openSession(true);
            /* 获取到mapper对象 */
            PersonMapping personMapping = sqlSession.getMapper(PersonMapping.class);
         personMapping.selectPersonById(2);

    以上代码分为四步:

    1.获取到SqlSessionFactory对象,

    2.获取到Sqlsession对象,

    3..获取到具体某一个Mapper对象,mapper在这里就是一个代码,用来代码接口之中的crud方法

    4.执行具体的<select>之中定义的sql语句

    前两两步感觉没什么必要记录了,直接看三,四步:
    通过debug得到,当我们执行查询语句时,会跳转到MapperProxy对象当中的invoke方法,这个对象实现了jdk的动态代理接口InvocationHandler,用到了动态代理的模式,之后有了这个动态代理对象MapperPorxy,我们的crud就是通过这个代理对象来执行,所以我们才把获取到的对象叫做代理对象。如下就是这个MapperPorxy对象:

    我刚分析了一下,我觉得每一步都能看懂,整合起来就不懂了,感觉看的也很枯燥,没意思,说的是学习一下别人的这种设计模式,设计思想,但是我感觉我现阶段根本没有这个功底。

  • 相关阅读:
    【题解】NOIP2016 提高组 简要题解
    【题解】LOJ2759. 「JOI 2014 Final」飞天鼠(最短路)
    【题解】Comet OJ 国庆欢乐赛 简要题解
    【题解】P3645 [APIO2015]雅加达的摩天楼(分层图最短路)
    【题解】NOIP2017逛公园(DP)
    【题解】Comet OJ Round 70 简要题解
    【题解】 由乃(思博+欧拉定理+搜索)
    【题解】P5446 [THUPC2018]绿绿和串串(manacher)
    【题解】P4503 [CTSC2014]企鹅QQ(哈希)
    【题解】CF986E Prince's Problem(树上差分+数论性质)
  • 原文地址:https://www.cnblogs.com/eenio/p/11332455.html
Copyright © 2011-2022 走看看