2022-09-27
背景: 学习小傅哥的手写mybatis 项目,在学习的过程中有所收获,做笔记记录一下。
学习的所得有以下两个方面:
1.从整体设计来说,学习了mybatis 这样的复杂项目他的设计思路,运用了大量设计模式,做职责分离,程序解耦,服务分治处理,使得这个项目在整体上结构很清晰,在后期维护和扩展上有很多优势。
2.深入到代码层面来说,学习了mybatis 的业务处理逻辑,明白了,在整体优秀的框架下,亿点点细节也是必不可少的,细节落实在每件需要处理的事情上。在代码层面,我获得了反射,代理,数据库连接池,动态上下文,等知识要点的深入了解,这些要点会在后期的笔记中一一呈现。
接下来我从整体视角来对这个项目做介绍和概述:
手写mybatis 这个项目是mybatis的迷你缩小版,浓缩了mybatis 的核心功能,具体核心功能如下:
1.读取xml 文件,其中包括配置文件,具体的mapper.xml
2.数据库连接管理,其中包括数据库池化技术
3.动态代理,主要用来代理mapper 的接口文件,将其与mapper.xml 里的sql 一一对应起来
4,反射对象,具体是将mapper.xml 里查询的入参, 和查询后的结果集通过反射的方式包装起来,作为一个结果集返回
5.动态上下文,主要是用于动态sql 的生成,生成之后,将其加入上下文之中,要用到直接调用
6. 整合到spring ,对象的生成托管到spring bean 容器里,以便与spring 项目相结合
这里借用小傅哥博客上的架构图,详情