在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

如何理解Mybatis源码

138次阅读
没有评论

共计 2638 个字符,预计需要花费 7 分钟才能阅读完成。

本篇内容介绍了“如何理解 Mybatis 源码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

为什么纠结?

因为面试的时候,面试官很喜欢问:你看过什么框架源码?JDK 源码也行。

这时候,如果回答没有看过,虽然没让你立马回去等通知。但也许,你在面试官心中的印象就大打折扣了。

如果回答看过,并且还能较为流利地说上一番,那面试官或许会在心里赞叹:小伙子可以呀!(PS:很多面试官自己也没看过,或者看过很多也忘了)。

总之,你要是能说上个 123,那给面试官的印象就会杠杠滴好。何愁工作? 何愁加薪?

为什么烦?

大部分人的情况是:源码不是没有看过,而是每次只看得下一部分。为什么只看得下一部分呢? 通常有下面三种原因:

缺乏技术支撑。看源码是需要技术支撑的,不是随便一个小白也能看懂的。没有一些技术支撑,你顶多看看一小段,然后就看不下去,于是就放弃了。

缺乏正确心态。看源码确实挺无聊的,如果大家心态没放好,把它当做一种任务去做,肯定觉得无聊,而且很容易放弃。

缺乏足够时间。确实很忙,经常看了一部分后,天天加班,没时间看,忙完后又忘了之前正在看的某某源码。

个人建议

对于一般 java 程序员来说,阅读源码之前到底需要些什么技能呢?

个人建议,以下基础知识必须会一些:

会设计模式:包括单例模式、工厂模式、代理模式、装饰器模式、责任链模式、模板方法模式等。

会猜测:大胆的猜测,在看源码的时候,多站在高层次想想,如果你是 Mybatis 的设计者,你会怎么设计?

会挑重点看:别被没写参数校验、类型校验等问题卡在那里。

会画图:流程图、类图等,找一些在线画图工具,媒体画完就保存下来,如果中途一段时间不看了,再回头看看这些图,也能快速继续。

Mybatis 源码分析

今天,我们就来看看 Mybatis 源码的阅读,具体举个例子来看看:

案例和疑问

从我们最初的 demo 中开始:

public static void main(String[] args) { String resource =  mybatis-config.xml  InputStream inputStream = null; SqlSession sqlSession = null; try { inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); sqlSession = sqlSessionFactory.openSession(); User user = sqlSession.selectOne(com.tian.mybatis.mapper.UserMapper.selectById , 1); System.out.println(user); } catch (Exception e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } sqlSession.close(); } }

关于获取数据流 inputStream,这个我们就不讨论了,我们主要关注重点。

对于上面 demo,我们可以分成五个步骤:

第一步,创建一个工厂类 sqlSessionFactory。

配置文件的解析就是在这里完成的。包括 mybatis-config.xml 和我们的 Mapper.xml 映射器文件。这一步我们关心的内容是:解析的时候做了什么? 产生了什么对象,解析的结果放在哪里的。因为这将意味着,我们后面使用的时候去哪里获取这项配置项内容。

第二步,通过 SqlSessionFactory 创建一个 SqlSession。

那么问题来了,SqlSession 中定义了各种增删改查的 API,是给客户端调用,返回的是什么实现类? 除了 SqlSession 以外,我们还创建了什么对象,创建了什么环境?

第三步,获取到一个 Mapper 对象。

问题来了 UserMapper.java 是一个接口,并没有为它创建实现类,那又是怎么被实例化的呢? 我们使用的这个 Mapper 对象到底是什么对象呢? 为什么要从 SqlSession 里去获取呢? 为什么传进去一个接口,然后还要用一个接口去接收呢?

第四步,调用接口方法。

问题是我们的接口没有实现类,为什么就可以直接调用它的方法呢? 那它调用的是谁的方法呢? 是如何把 SQL 给关联起来的呢? 是如何获取到数据的呢?

第五步,关闭相关资源。

开始源码分析过程

由于涉及到内容较多,下面就用几张图来展示整个流程。我们可以通过这几张图来快速翻阅 Mybatis 的源码。

第一步

SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

这一句代码的整个流程如下:

根据 inputStream,解析配置文件,创建出一个 DefaultSqlSessionFactory 默认的 SqlSessionFactory   实现类。构建出一个工厂类,这个工厂类专门用来创建 SqlSession 对象的。

第二步

SqlSession sqlSession = sqlSessionFactory.openSession();

获取 SqlSession 的整个流程如下:

第三步

User user = sqlSession.selectOne(com.tian.mybatis.mapper.UserMapper.selectById , 1);

第三步和第四步就是这行代码画的。

这一步是返回一个映射器代理类,映射器代理类专门用来给 UserMapper 接口和 UserMapper.xml 绑定的代理类。创建出来的代理类就可以实例化了,然后就可以调用 UserMapper 接口的方了。

第四步:调用代理对象执行 SQL 的整个过程。

第五步,关闭资源。

“如何理解 Mybatis 源码”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-27发表,共计2638字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 一级毛片免费在线观看网站 | 成年人视频www | 日本欧美一区二区三区在线观看 | 欧美中文一区 | 狠狠亚洲丁香综合久久 | 久久机热一这里只精品 | 天天弄天天操 | 精品国产乱码久久久久夜深人妻 | 久久久久久久久性潮 | 丁香五月亚洲综合深深爱 | 激情久久久久久久久久久 | 久久中文字幕人妻熟av女蜜柚m | 下面一进一出好爽视频 | 国产午夜视频在线观看网站 | av天堂午夜精品一区二区三区 | 欧美丰满一区二区免费视频 | 国产午夜高清一区二区不卡 | 久久综合精品国产二区无码 | 激情综合亚洲五月色婷婷 | 在线精品91青草国产在线观看 | 国产成人精品无码一区二区老年人 | 亚洲成人影院在线观看 | 亚洲专区视频 | 欧美日韩在线成人看片a | 成 人片 黄 色 大 片 | 欧美成年网站 | 美女视频大全视频a免费九 美女视频大全网站免费 | 亚洲精品无码成人片久久不卡 | 日本少妇被黑人猛cao | 欧美日韩亚洲精品一区 | 亚洲成人免费视频在线 | 亚洲精品天堂无码中文字幕 | 久久成人免费电影 | 亚洲精品国产一区黑色丝袜 | 久久久久久综合 | 毛片大全免费观看 | 无码人妻一区二区三区免费视频 | 亚洲香蕉伊综合在人在线 | 色噜噜狠狠色综合久 | 男女肉粗暴进来120秒动态图 | 久久天天躁狠狠躁夜夜网站 |