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

相关推荐

  • Hibernate3有哪些新特性

    技术Hibernate3有哪些新特性小编给大家分享一下Hibernate3有哪些新特性,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Hiber

    攻略 2021年12月8日
  • 丽江到香格里拉要多久,丽江古城去香格里拉怎么坐车

    技术丽江到香格里拉要多久,丽江古城去香格里拉怎么坐车丽江古城到香格里拉大概有200公里左右丽江到香格里拉要多久,最方便的到达和游玩方式是乘坐旅游专线车,旅游专线车有只发香格里拉的,有中停游玩上虎跳峡,有中停游玩中虎跳峡的

    生活 2021年10月24日
  • wei的成语,带wei(第一声)字的成语

    技术wei的成语,带wei(第一声)字的成语【危在旦夕】危险就在眼前。 【危如累卵】如垒起的蛋那样危险。喻极其危险。 【危言正色】刚直的言论和严正的态度。 【危言逆耳】正直的规劝听起来不顺耳。 【危言高论】正直而不同凡响

    生活 2021年10月20日
  • 2020-2021-1学期20212310《网络空间安全导论》第九周自习总结

    技术2020-2021-1学期20212310《网络空间安全导论》第九周自习总结 2020-2021-1学期20212310《网络空间安全导论》第九周自习总结2.1 密码学概述
    语言系统、数字系统和文字

    礼包 2021年12月5日
  • 然后用AFL开始你的第一次Fuzzing

    技术然后用AFL开始你的第一次Fuzzing然后用AFL开始你的第一次Fuzzing,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、前言模糊测试(Fu

    攻略 2021年11月26日
  • web前端的proxy有什么作用

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

    攻略 2021年11月12日