为什么看源码
- 提升技术功底 java基础
- 深度掌握技术框架
- 快速定位线上问题
- 面试必问
- 技术追求
原则是什么
- 定焦原则: 抓主线(抓住一个核心流程去分析,不要漫无目的的去看源代码)
- 宏观原则: 站在上帝视角,先脉络后枝叶 (切忌试图搞清楚每一行代码)
有哪些方法呢
- 先会使用,了解框架的设计思想和功能架构
- 抓主线,多尝试静态看代码
- 在源码中写注释&画流程图
- 整合总结
技巧有哪些
- 断点(观察调用栈,利用条件断点,表达式)
- 反调 (Find Usages)
- 根据接口方法找到具体实现 AoP AopProxyFactory
- 猜测类名方法名(比如doGetBean,doCreateBean)
- 看控制台日志
应该用什么心态读源码
- 克服对源码的恐惧心理
- 静下心读源码
传统 JDBC 的弊端:
-
jdbc 底层没有用连接池、操作数据库需要频繁的创建和关联链接。消耗很大的资源
-
写原生的 jdbc 代码在 java 中,一旦我们要修改 sql 的话,java 需要整体编译,不利于系统维护
-
使用 PreparedStatement 预编译的话对变量进行设置 123 数字,这样的序号不利于维护
-
返回 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