Mybatis SQL运行流程源码详解
作者:browser123 发布时间:2023-04-27 12:46:27
概述
源码就是能够被用来执行,生成机器能够识别的代码,通过开源源码,可以引用其功能。
重要性
1、mybatis中的sql执行,不仅要知道返回的结果是什么,还需要知道这结果是怎么来的,经过了怎样的处理,只有知道了这样的原理,碰到问题才能更好的知道问题出在那个环节。
2、能更好的扩展应用程序,可以做到代码的复用,减少开发成本和时间。
3、学习其中的设计思想能够在其他应用得已应用。
步骤
源码阅读,可以从测试用例着手,每个源码,多有大师们写的测试用例,咱们可以用大师们写的测试用例进行相关功能的测试,这样就可以知道其中的运行原理及一些设计思想。
步骤1 测试用例请求
步骤2 进行MapperProxy对象,MapperProxy代理是jdk * ,根据传入的mapper接口,动态生成代理对象,代理对象同时实现了InvocationHandler接口。
步骤3:进行到MapperMethod类,通过构造器初始化SqlCommand静态内部类,跟配置文件的方法签名对比,是不是有对应的方法。
步骤4 进行execute选择执行的Sqlsession
步骤5 进入DefaultSqlsession,选择执行的执行器,先选择缓存执行器,缓存没有选择默认的简单执行器,如果mybatis有配置,就选择配置的执行器,并设置预处理参数。
步骤6 进入申明处理对象进行查询,返回结果集
流程的请求总结
总结
1、mybatis使用了jdk的 * ,在程序执行的时候生成一个具体的代理对象,执行相关的逻辑,可以在代理的方法前后执行一些逻辑,不用改变原来类的逻辑,就能增强类方法的功能,在编写底层代码的时候 * 尤其重要;
2、应用广泛比如事物的管理、spring aop的原理实现,登录权限拦截、日志的统一输出、统计每个 api 的请求耗时等等。
3、研究源码并不是为了研究而研究,要学习其中的思想,比如 * 、工厂模式、建造者模式,要利用这些原则来增加程序的可维护性、复用性、灵活性、可靠性。
来源:https://blog.51cto.com/xxdeelon/2539818


猜你喜欢
- 本文实例讲述了java字符串相似度算法。分享给大家供大家参考。具体实现方法如下:public class Levenshtein {&nbs
- java进行时间转换成unix timestamp的具体代码,供大家参考,具体内容如下import java.text.DateFormat
- 前几天有个客户在系统上写了一段html语句,打开页面就显示一张炒鸡大的图片,影响美观。后来仔细想想,幸亏注入的仅仅是html语句,知道严重性
- 前言在Android开发过程中,不管是写Demo还是实战项目中,都会打印一些日志用于记录数据,调试来着,Android中的日志工具类是Log
- Spring @Cacheable指定失效时间新版本配置@Configuration@EnableCachingpublic class R
- 本文实例为大家分享了Android Studio实现进度条效果的具体代码,供大家参考,具体内容如下实验作业 要求一个进度条,进度随机效果图x
- 设计模式要进行共性与可变性的分析,对共性进行抽象,同时对可变性进行封装,没有完美的设计模式,作为一名开发者要懂得取舍,触类旁通,开发出高内聚
- 前言反射是我们框架的灵魂,反射也是我们框架的一个底层基石,没有反射也就没有框架,如果我们学好了反射,对我们阅读框架底层是有很大班助的——阿俊
- 原理解析在开发当中,“断点续传”这种功能很实用和常见,听上去也是比较有“逼格”的感觉。所以通常我们都有兴趣去研究研究这种功能是如何实现的?
- 什么是代理模式代理模式是开发中常见的一种设计模式,使用代理模式可以很好的对程序进行横向扩展。代理,顾名思义就是一个真实对象会存在一个代理对象
- 本文实例讲述了Android获取apk签名指纹的md5值以防止重新被打包的实现方法。分享给大家供大家参考,具体如下:做个记录(这里只是Jav
- C语言实现矩阵翻转 上下翻转与左右翻转实例代码:#include <stdio.h> void matrix (int m, i
- 自动装配的含义在SpringBoot程序main方法中,添加@SpringBootApplication或者@EnableAutoConfi
- 本文实例为大家分享了Android简单的自定义标题栏,供大家参考,具体内容如下android自定义控件向来都是开发者最头疼的,但是我们要有那
- 可以用于简单的过期订单取消支付、7天自动收货场景中1、Spring Boot整合redis 参考https://www.jb51.net/a
- StringRedisTemplate与RedisTemplate区别点两者的关系是StringRedisTemplate继承RedisTe
- Android ListView填充数据的方法因为多人开发,为了是自己开发的模块方便融合到主框架中,同时也为了减小apk的大小,要求尽可能少
- 有人问我,怎么判断一个点是不是在多边形内,本来想着把这个多边形分成一个又一个三角形,如图, 然后判断这个点是不是在某个三角形中,如
- Spring的事务隔离级别和事务的传播行为是面试中经常考察的问题,做个简单的总结。传播行为在SpringBoot中通过Transaction
- java实现五子棋小游戏package Gomoku;import java.awt.Toolkit;import javax.swing.