mybatis做为目前国内最为流行的开源orm框架,我们平时在使用时会感受到其带来的诸多便利,但是很少去深入分析,mybatis源码代码量不多,功能丰富,是一个很好的学习样例,本系列小刀就和大家一起来学习mybatis
小刀fork了一份mybatis的源码,同时写补充一些注释进去 https://github.com/weixiaodexiaoxiaodao/mybatis-3 可以选择先下载下来再导入,或者直接用idea下载,两种方法都是可以的
导入之后,我们可以看到这是一个基于maven的工程,可以用平常导入maven工程的方法去导入
打开settings.xml,找到mirrors 节点,然后复制以下代码
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>
我们可以看到,mybatis并不是一个多模块项目,和tomcat一样,只有一个模块,而且源码开发人员很友好的在每个包下面,都有一个package-info.java,对这个包做了简单的说明
通过目录,我们可以看到,mybaits有几下几大模块
annotation: 在这里面可以看到我们常用的注解,如 @Mapper ,以及mybatis的新特性 @Select等等,都是在这个包里面进行声明的
binding: 做Mapper的绑定工作,绑定mapper接口和代理类
builder: 通过xml,注解等构造mybatis的配置
cache: 配置mybatis的缓存
datasource:数据源
executor: 这个是重点组件,执行sql的组件
io: 资源处理模块: mybatis有个自己封装的VFS(virtual File system)文件处理系统
jdbc:叫sql预处理模块,用于java层面书写sql语句
logging:日志模块,可以和不同的日志系统进行集成
mapping: 映射模块,主要是parameterMap , resultMap , 数据库字段和java实体类字段之间
parsing: 解析xml的模块,使用的dom+xpath的方法来解析xml
reflection: 反射模块,同时把反射到的信息缓存到HashMap中
scripting: 脚本模块,用于处理一些自定义的参数拼接等
session: mybatis的重点模块,我们sql语句都是在session内执行的
Transaction: 事务的处理,可以看到是真实是处理是通过connection调用jdbc来处理的
type:做一些类型的映射,声明等等之类的, 为上面的模块提供基础数据