(五)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对象:

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

原文地址:https://www.cnblogs.com/eenio/p/11332455.html

时间: 2024-11-10 07:48:14

(五)myBatis架构以及SQlSessionFactory,SqlSession,通过代理执行crud源码分析---待更的相关文章

mybatis的mapper为什么不用写实现类的源码分析

首先看下我们spring和mybatis扫描包的时候是怎样写: 有两种写法: 第一种写法: <mybatis-spring:scan base-package="com.gupaoedu.crud.dao"/>   第二种写法: <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property n

[五]类加载机制双亲委派机制 底层代码实现原理 源码分析 java类加载双亲委派机制是如何实现的

Launcher启动类 本文是双亲委派机制的源码分析部分,类加载机制中的双亲委派模型对于jvm的稳定运行是非常重要的 不过源码其实比较简单,接下来简单介绍一下 我们先从启动类说起 有一个Launcher类   sun.misc.Launcher; 仔细看下这简短的几行注释,可以得到有用的信息 ps:直接IDE里面查看反编译的,看不到注释的,可以下载openJDK查看源码,我的这个版本是openjdk-8-src-b132-03_mar_2014 sun.misc.Launcher这个类是系统用于

Docker源码分析(五):Docker Server的创建

1.Docker Server简介 Docker架构中,Docker Server是Docker Daemon的重要组成部分.Docker Server最主要的功能是:接受用户通过Docker Client发送的请求,并按照相应的路由规则实现路由分发. 同时,Docker Server具备十分优秀的用户友好性,多种通信协议的支持大大降低Docker用户使用Docker的门槛.除此之外,Docker Server设计实现了详尽清晰的API接口,以供Docker用户选择使用.通信安全方面,Docke

vue2.0源码分析之理解响应式架构

https://segmentfault.com/a/1190000007334535 分享前啰嗦 我之前介绍过vue1.0如何实现observer和watcher.本想继续写下去,可是vue2.0横空出世..所以   直接看vue2.0吧.这篇文章在公司分享过,终于写出来了.我们采用用最精简的代码,还原vue2.0响应式架构实现   以前写的那篇 vue 源码分析之如何实现 observer 和 watcher可以作为本次分享的参考.   不过不看也没关系,但是最好了解下Object.defi

Mybatis源码分析之Cache二级缓存原理 (五)

一:Cache类的介绍 讲解缓存之前我们需要先了解一下Cache接口以及实现MyBatis定义了一个org.apache.ibatis.cache.Cache接口作为其Cache提供者的SPI(ServiceProvider Interface) ,所有的MyBatis内部的Cache缓存,都应该实现这一接口 Cache的实现类中,Cache有不同的功能,每个功能独立,互不影响,则对于不同的Cache功能,这里使用了装饰者模式实现. 看下cache的实现类,如下图: 1.FIFOCache:先进

Mybatis源码分析一(SqlsessionFactory及源码整体结构)

搞java的想提高自己的姿势水平,想拿高工资,对常用开源框架的深入了解是必不可少的,想深入了解源码分析更是必不可少的,今天我开始对mybatis的源码进行分析,并做点记录以备查验.开源框架研究,文档的获取建议去读官方的文档和例子,这样获得的知识成体系,成体系的知识被你掌握了,你就可以说你精通它了.好了,开始吧. 上面说道要看官方的文档,那么就得找到官方网站什么的对吧?这里给几个网站都是不错的: Myabtis官网:http://www.mybatis.org/ github地址:https://

MyBatis源码分析(五):MyBatis Cache分析

一.Mybatis缓存介绍 在Mybatis中,它提供了一级缓存和二级缓存,默认的情况下只开启一级缓存,所以默认情况下是开启了缓存的,除非明确指定不开缓存功能.使用缓存的目的就是把数据保存在内存中,是应用能更快获取数据,避免与数据库频繁交互,特别是在查询比较多.命中率比较高的情况下,缓存就显得很重要.但是使用不得当,会产生脏数据. 二.目录 一级缓存介绍及相关配置. 一级缓存工作流程及源码分析. 一级缓存总结. 二级缓存介绍及相关配置. 二级缓存源码分析. 二级缓存总结. 全文总结. 三.一级缓

JStorm与Storm源码分析(五)--SpoutOutputCollector与代理模式

本文主要是解析SpoutOutputCollector源码,顺便分析该类中所涉及的设计模式–代理模式. 首先介绍一下Spout输出收集器接口–ISpoutOutputCollector,该接口主要声明了以下3个抽象方法用来约束ISpoutOutputCollector的实现类.接口定义与方法说明如下: /** * ISpoutOutputCollector:Spout输出收集器接口 */ public interface ISpoutOutputCollector { /** * 改方法用来向外

MyBatis架构与源码分析&lt;资料收集&gt;

1.架构与源码分析 :https://www.cnblogs.com/luoxn28/p/6417892.html .https://www.cnblogs.com/wangdaijun/p/5296830.html 2.执行器篇:https://blog.csdn.net/qingtian211/article/details/81838042 3.插件篇:https://www.cnblogs.com/xrq730/p/6984982.html 4.缓存篇:https://www.cnblo