如何理解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)

相关推荐

  • Redis事务处理的操作方法是什么

    技术Redis事务处理的操作方法是什么本篇文章给大家分享的是有关Redis事务处理的操作方法是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、简介

    攻略 2021年10月20日
  • C#的ServerSuperIO有什么特点

    技术C#的ServerSuperIO有什么特点这篇文章主要讲解了“C#的ServerSuperIO有什么特点”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#的Serve

    攻略 2021年11月26日
  • linux如何操作mysql

    技术linux如何操作mysql这篇文章给大家分享的是有关linux如何操作mysql的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。试着研究openfire,顺道简单研究了一下mysql。wi

    攻略 2021年10月21日
  • Nginx常用功能有哪些

    技术Nginx常用功能有哪些这篇文章主要介绍“Nginx常用功能有哪些”,在日常操作中,相信很多人在Nginx常用功能有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx常用功能

    攻略 2021年12月10日
  • 一寸照片尺寸多少厘米,一寸照片长宽分别是多少厘米

    技术一寸照片尺寸多少厘米,一寸照片长宽分别是多少厘米一寸相片的长和宽分别是宽2.6(厘米)一寸照片尺寸多少厘米、长3.7(厘米)。一般照片的尺寸规格/英寸尺寸/cm根据150PPI计算的数码相机可冲洗最大照片的数据对照表

    生活 2021年10月20日
  • 望庐山瀑布的意思全解,古诗《庐山瀑布》的意思

    技术望庐山瀑布的意思全解,古诗《庐山瀑布》的意思意思香炉峰在阳光的照射下生起紫色烟霞,远远望见瀑布似白色绢绸悬挂在山前。高崖上飞腾直落的瀑布好像有几千尺,让人恍惚以为银河从天上泻落到人间。原文日照香炉生紫烟,遥看瀑布挂前

    生活 2021年10月28日