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
猜你喜欢
- logback-classic 使用testCompile的打包今天使用gradle打包的时候logback-classic一直打包不进去。
- 前言:上篇总结了下WebApi的接口测试工具的使用,这篇接着来看看WebAPI的另一个常见问题:跨域问题。本篇主要从实例的角度分享下CORS
- CSRF介绍CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click atta
- 使用try-with-resource机制关闭连接JAVA的一大特性就是JVM会对内部资源实现自动回收即自动GC,给开发者带来了极大的便利。
- 1、点击【File】->【Project Structure】菜单(或使用Shift+Ctrl+Alt+S快捷键),打开【Projec
- 1)1、1、2、3、5、8.......用递归算法求第30位数的值?首先我们能够发现从第3位数起后一位数等于前两位数值之和,即:x=(x-1
- 在java中如果我们需要遍历集合并删除其中的某些元素时,例如对于List来说,我们有三种办法。1. 普通的for循环遍历并删除public
- 本文实例讲述了Java正则验证电话,手机,邮箱,日期,金额的方法。分享给大家供大家参考,具体如下:package com.hooypay.t
- 做多媒体项目时,经常会最后来个客户签名并保存之类的,签名保存之前的博客Unity3d截图方法合集有介绍过了,今天闲着把断笔写字的也贴出来吧,
- 本文实例讲述了C#中foreach语句使用break暂停遍历的方法。分享给大家供大家参考。具体分析如下:下面的代码演示了在C#中使用fore
- 这篇文章主要介绍了Mybatis一对多关联关系映射实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 上一篇文章我们了解了Java背包问题求解实例代码,接下来我们看看Java中模仿用户登录的相关代码,下面是具体内容。基于用户从控制台输入模拟的
- 本文实例展示了DevExpress实现自定义TreeListNode的Tooltip的方法,具体方法如下所示:主要功能代码如下:/// &l
- 本文实例为大家分享了java pdf加水印的具体代码,供大家参考,具体内容如下引入依赖<dependency> <grou
- LinkedList与ArrayList都是List接口的具体实现类。LinkedList与ArrayList在功能上也是大体一致,但是因为
- Console.WriteLine("This is a Client, host name is {0}", Dns.
- 前言大家都知道,不少仪器工作站可xls文件和2007+的xl以将数据导出为Excel文件,包括97-2003版本的sx文件。采集Excel文
- 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上.比如sharedpreferences可以将数据保
- 做快递面单打印模板,快递要求纸张大小100 x 150mm。PageSize.A4=595 x 842A4尺寸=210mm×297mm故设置
- 前言爱美之心人皆有之,在 unix 和 linux 命令行环境下工作的闷骚程序员们可能也觉得命令行太单调了,而是他们就发明了在命令行下采用