如何理解Mybatis源码

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

本文介绍了“如何理解Mybatis源代码”的相关知识。很多人在实际案例的操作中会遇到这样的困难。让边肖带领你学习如何处理这些情况。希望大家认真阅读,学点东西!

为什么纠结?

因为面试的时候,面试官喜欢问:你看过什么框架源码?JDK源代码就可以了。

这个时候,如果你还没有看答案,就不会被告知马上回去等通知。但也许,你在面试官心目中的印象会大大降低。

如果答案是肯定的,而且你能流利地说最后一遍,面试官可能会在心里佩服:年轻人可以!(PS:很多面试官自己没看过,或者看多了忘了)。

总之,如果能说出最后123,会给面试官留下好印象。为什么担心工作?为什么担心加薪?

为什么烦?

大多数人的情况是,源代码不是未读,而是一次只能读下一部分。为什么只看下一部分?通常有三个原因:

缺乏技术支持。阅读源代码需要技术支持,任何小白都无法理解。没有一些技术支持,最多看一小段时间,然后就看不下去了,就放弃了。

缺乏正确的心态。看源代码真的很无聊。如果不把心思放好,肯定会很无聊,很容易放弃。

时间不够。我真的很忙。经常看一部分,每天加班。我没有时间读它。忙的时候忘记了之前看的那个某某源代码。

个人建议

对于一般的java程序员来说,阅读源代码之前需要具备哪些技能?

个人认为,必须了解以下基本知识:

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

猜想:大胆猜想,在阅读源代码的时候,要有更高层次的思考。如果你是Mybatis的设计师,你会怎么设计?

集中精力:不要被参数验证、类型验证等问题卡在那里。

会画画:流程图、类图等。找一些在线的画图工具,媒体画好之后保存。如果中途有一段时间没有看,可以通过回看这些图快速继续。

Mybatis源码分析

今天我们来看一下Mybatis源代码的阅读,举个例子看看:

案例和疑问

从我们最初的演示开始:

publicationstativitmain(String[]args){ StringReource=' mybatis-config . XML ';InputStreaminputStream=nullsqlsessionsqlssession=null;请尝试{ inputStream=resources . getresourceasstream(资源);sqlsessionfactoryqlssessionfactory=newsqlssessionfactorybuilder()。构建(InputStream);sqlsesession=sqlsessionfactory . opensession();user user=sqlsesession . selectone(' com . Tian . my batis . mapper . user mapper . selectbyid ',1);System.out.println(用户);铌

sp;  } 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);

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

如何理解Mybatis源码

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

第二步

SqlSession  sqlSession = sqlSessionFactory.openSession();

获取SqlSession的整个流程如下:

如何理解Mybatis源码

第三步

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

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

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

如何理解Mybatis源码

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

如何理解Mybatis源码

第五步,关闭资源。

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

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/41736.html

(0)

相关推荐

  • 使用SqlBulkCopy时为注意Sqlserver表中使用缺省值的列的示例分析

    技术使用SqlBulkCopy时为注意Sqlserver表中使用缺省值的列的示例分析本篇文章给大家分享的是有关使用SqlBulkCopy时为注意Sqlserver表中使用缺省值的列的示例分析,小编觉得挺实用的,因此分享给

    攻略 2021年12月4日
  • playwrightpython教程(python中class教学)

    技术Python中Playwright怎么用这篇文章将为大家详细讲解有关Python中Playwright怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Playwright是Mi

    攻略 2021年12月20日
  • 一步一步教你画桃花,如何画桃花或春天开的花

    技术一步一步教你画桃花,如何画桃花或春天开的花春天的画春天的花朵阳春三月,春光明媚,桃花“争开不待叶”盛开于枝头.它芬菲烂漫一步一步教你画桃花、抚媚鲜丽,如一片片红霞,与绿树婆婆的垂柳相衬映,形成了桃红柳绿、柳暗花明的春

    生活 2021年10月23日
  • IE6有哪些常见CSS解析Bug

    技术IE6有哪些常见CSS解析Bug这篇文章主要讲解了“IE6有哪些常见CSS解析Bug”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“IE6有哪些常见CSS解析Bug”吧

    攻略 2021年12月10日
  • 分布式唯一id获取策略是什么

    技术分布式唯一id获取策略是什么分布式唯一id获取策略是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。常用获取分布式唯一id方法,特点,全局唯一,趋势递

    攻略 2021年10月20日
  • 用比喻的修辞手法写一句话,运用比喻、拟人的修辞手法写句子

    技术用比喻的修辞手法写一句话,运用比喻、拟人的修辞手法写句子1用比喻的修辞手法写一句话、一阵风吹来,树摆动着枝叶,对我们点头微笑。 2、玫瑰在宁静的夜晚向星星眨眼。 3、无数的麦粒在风中微笑,飞舞。 4、在绿色的荷叶间,

    生活 2021年10月22日