技术分享

深入了解 MyBatis 源码解析(一)

2019-12-29  本文已影响0人  java高级架构F六

之前在接触MyBatis的时候,就觉得这个技术的思想很新颖,要实现这些功能并不难,但是如何实现,以及MyBatis的整体架构却是我远远不及的。

Mybatis作为一个半自动化ORM框架,同时具有灵活性和方便性,因此在国内各个大厂都十分受欢迎,如果让我自己实现这样一个框架,我可能会首先想到以下几块:


当我概览了MyBatis的源码之后,发现我还是比较年轻,毕竟一个好的框架被广泛使用的时候,就会涉及到各种不同的需求,比如动态SQL,比如参数类型映射,比如连接池,延迟加载等等,,

而MyBatis依然将这些功能非常优雅的实现了。


MyBatis 模块分析

这里,我们先简单的划分一下MyBatis的功能模块。

配置解析

MyBatis使用的是Configuration类来映射整个MyBatis的配置,Configuration的生成是通过SqlSessionFactoryBuilder解析,使用的是JDK中的DOM接口,这里MyBatis并没有使用单例实现Configuration,原因如下:

不过MyBatis中几乎所有的代码都会访问Configuration,因此几乎所有的对象的构造方法都会带有Configuration参数,这样看起来也是比较繁琐的

SQL 执行

MyBatis中,SQL的执行都是通过Executor完成,其主要提供了:

参数映射

MyBatis提供了可自己配置的参数映射,主要用来解决一些类似枚举的特殊情况,其主要接口为TypeHandler

反射

MyBatis的核心便是通过反射给对象赋值以及动态代理调用方法,因此对反射的使用十分频繁,在MyBatis中,通过ResultMap定义的对象都会被封装为ObjectWrapper,便于方便的调用Setter/Getter方法。


总的来说,MyBatis的结构设计看着十分优雅,非常值得一学。

需要了解更多可以参考这篇文章https://www.jianshu.com/p/af52bdb8106b

这里补上一张MyBatis的总结结构:

深入了解 MyBatis 源码解析(一)
上一篇 下一篇

猜你喜欢

热点阅读