为什么看源码

  1. 提升技术功底 java基础
  2. 深度掌握技术框架
  3. 快速定位线上问题
  4. 面试必问
  5. 技术追求

原则是什么

  1. 定焦原则: 抓主线(抓住一个核心流程去分析,不要漫无目的的去看源代码)
  2. 宏观原则: 站在上帝视角,先脉络后枝叶 (切忌试图搞清楚每一行代码)

有哪些方法呢

  1. 先会使用,了解框架的设计思想和功能架构
  2. 抓主线,多尝试静态看代码
  3. 在源码中写注释&画流程图
  4. 整合总结

技巧有哪些

  1. 断点(观察调用栈,利用条件断点,表达式)
  2. 反调 (Find Usages)
  3. 根据接口方法找到具体实现 AoP AopProxyFactory
  4. 猜测类名方法名(比如doGetBean,doCreateBean)
  5. 看控制台日志

应该用什么心态读源码

  1. 克服对源码的恐惧心理
  2. 静下心读源码

传统 JDBC 的弊端:

  1. jdbc 底层没有用连接池、操作数据库需要频繁的创建和关联链接。消耗很大的资源

  2. 写原生的 jdbc 代码在 java 中,一旦我们要修改 sql 的话,java 需要整体编译,不利于系统维护

  3. 使用 PreparedStatement 预编译的话对变量进行设置 123 数字,这样的序号不利于维护

  4. 返回 result 结果集也需要硬编码。

mybatis 核心概念

Configuration 、 SqlSessionFactory 、 Session 、 Executor 、 MappedStatement 、StatementHandler、ResultSetHandler

名称 意义
Configuration 管理 mysql-config.xml 全局配置关系类
SqlSessionFactory Session 管理工厂接口
Session SqlSession 是一个面向用户(程序员)的接口。SqlSession 中提供了很多操作数据库的方法
Executor 执行器是一个接口(基本执行器、缓存执行器)作用:SqlSession 内部通过执行器操作数据库
MappedStatement 底层封装对象作用:对操作数据库存储封装,包括 sql 语句、输入输出参数
StatementHandler 具体操作数据库相关的 handler 接口
ResultSetHandler 具体操作数据库返回结果的 handler 接口

源码过程:

源码编译与下载

https://github.com/mybatis/mybatis-3
https://github.com/mybatis/parent(依赖)

可以直接idea导入 也可以直接下载为zip包(推荐这种)。

Mybatis源码袭来parent工程。需要先编译parent工程在编译mybatis,具体如下

解决parent依赖问题:

在构建的过程中会出现找不到pom.xml中依赖的父模块mybatis-parent
我们需要将paren工程克隆到本地目录中:git clone https://github.com/mybatis/parent.git ,然后先进入parent工程下进行mvn clean install 将parent工程依赖的包下载下来、并保证parent工程编译通过,这步不会出现问题,在编译的输出信息中我们会看到parent工程的版本号,如图所示:

pom.xml文件parent依赖的version标签处,如下文。
接下来修改mybatis工程的pom.xml文件中标识parent依赖的地方:

org.mybatis
mybatis-parent
28-SNAPSHOT
…/parent/pom.xml

告诉我们部分插件没有指定的相应的版本号,出于工程的稳定性考虑需要对使用的插件指定其版本号,并给出了合适的版本号,如图红色方框中的文字。我们只要在mybatisg工程的pom.xml文件中找到相对应的插件处添加$NUM 标签即可, $NUM代表具体的版本号。到这我们再执行mvn clean install 指令就可以将mybatis工程构建成功了。

最后

对本文有不同理解的,或者有看法的欢迎在评论区评论,另外我本人建了一个群,作为一个学习平台,有什么问题可以在群里提问,同时还可以领取一份整理好的大厂面经,点击此处进群,暗号CSDN,




上述资料已经整理好,需要的可以点击此处免费领取,暗号CSDN

MyBatis为什么这么“屌”?这些MyBatis的秘密,分分钟吊打面试官相关推荐

  1. 面试大厂被MyBatis问到“哑口无言”?这份MyBatis源码笔记助你吊打面试官!

    写在前面 随着手机.平板电脑等移动终端的广泛应用,移动互联网时代已经到来.在这个时代里,构建一个高效的平台并提供服务是移动互联网的基础,在众多的网站服务中,使用Java构建网站的不在少数,移动互联网的 ...

  2. mybatis源码深度解析_30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

    MyBatis 是一个优秀的 Java 持久化框架,SSM 框架组合(Spring + SpringMVC + Mybatis),依赖 MyBatis 搭建的项目更是数不胜数,在互联网公司的使用中,占 ...

  3. mybatis 使用in 查询时报错_不会Mybatis?一文教你手写实现Mybatis(超详细),吊打面试官!...

    一.MyBatis核心组件 在开始实现我们的mybatis框架之前我觉得有必要先学习一下[MyBatis核心组件],如下示意图(出自前文),在图中可以了解到更多的细节. 二.MyBatis手写实现 1 ...

  4. 带你彻底搞懂MyBatis的底层实现之缓存模块(Cache)-吊打面试官必备技能

      基础支持层位于MyBatis整体架构的最底层,支撑着MyBatis的核心处理层,是整个框架的基石.基础支持层中封装了多个较为通用的.独立的模块.不仅仅为MyBatis提供基础支撑,也可以在合适的场 ...

  5. mybatis第一讲:初探mybatis实现简单的查询

    一.知识要点 什么是MyBatis? (1)MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的 JDBC代码和参数的手工设置以及结果集的检索.MyB ...

  6. 一个 Mybatis 开发神器:Fast MyBatis 超好用

    欢迎关注方志朋的博客,回复"666"获面试宝典 fastmybatis 是一个 mybatis 开发框架,其宗旨为:简单.快速.有效.零配置快速上手,无需编写 xml 文件即可完成 ...

  7. 面试官:你能说说MyBatis拦截器原理吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Format cnblogs.com/fangjian042 ...

  8. 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    来自:Java建设者 初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.M ...

  9. java执行sql文件_面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

最新文章

  1. selenium3 浏览器驱动下载及验证
  2. Angular项目中,基于esriLoader+iframe实现不同页面调用3.x与4.x ArcGIS JS API
  3. mysql int tinyint_MySQL中int(M)和tinyint(M)数值类型中M值的意义
  4. poj 1182 食物链(高级的带权并查集)
  5. js 返回上一页和刷新以及页面跳转
  6. linux7自动挂载怎么做,CentOS7 Virtual Box 开机自动挂载共享文件夹
  7. 山大计算机学院副院长屠长河,留学交流系列——山东大学计算机学院访问澳门大学...
  8. linux如何删除密钥链接,如何在不创建新密钥的情况下删除SSH密钥的密码短语?...
  9. 八:Webpack的加载器
  10. umi封装request方法 ts版
  11. tesstwo深度优化_十年磨一剑:自主可控国产微观交通仿真软件TESS NG研发之路
  12. npm 及 webpack打包工具
  13. ORACLE APEX-下载-利用插件
  14. Linux驱动:内核的中断机制之二--request_threaded_irq函数使用
  15. Android解决fragment来回切换重新实例化问题
  16. Fragmentation 源码分析
  17. 盘点 | 常用 PG 数据恢复方案概览
  18. SEI、Envestnet、AssetMark2019年度观察 ——美国TAMP行业代表性公司对比分析
  19. WOL 微星 X570A-PRO 远程唤醒及远程桌面
  20. STM32F4简易示波器

热门文章

  1. 信息学奥赛一本通:1055:判断闰年
  2. Fortran 77
  3. vue 一个动态链接url转成二维码
  4. OpenStack使用Placement做资源管理时虚拟机无法调度的一次排错记录
  5. 女神找我帮忙--图片转成手绘,该不该答应?
  6. 达人评测锐龙r7 5800h和酷睿i7 12650h选哪个好
  7. TITAN RTX 与 RTX 3090 参数的对比,探计单双精度的问题
  8. STM32F103系列芯片的地址和寄存器映射原理、LED轮流闪烁实现
  9. C++之Queue容器初学
  10. 12.17-Linux系统定制