1.mybatis源码:模块划分

Mybatis模块分层

image.png
基础支撑层:技术组件专注于底层技术实现,通用性较强无业务含义;
核心处理层:业务组件专注 MyBatis 的业务流程实现,依赖于基础支撑层; 
接口层:MyBatis 对外提供的访问接口,面向 SqlSession 编程;
为什么要分层?
1.代码和系统的可维护性更高。系统分层之后,每个层次都有自己的定位,
每个层次内部的组件都有自己的分工,系统就会变得很清晰,维护起来非常明确;

2.方便开发团队分工和开发效率的提升

3.提高系统的伸缩性和性能。

Mybatis各个模块作用:

1. org.apache.ibatis.annotations:注解功能
包含所有mapper 接口中用到的注解
例如常用的 @Param,@Update、@Select、@Delete 等
2. org.apache.ibatis.binding:mapper代理映射
生成mapper 接口的动态代理并进行管理
3.org.apache.ibatis.builder:xml解析
BaseBuilder 构建器基类
XMLConfigBuilder 解析configuration.xml配置文件
XMLMapperBuilder 解析Mapper.xml配置文件
XMLStatementBuilder 解析elect\update\delete  标签
MapperAnnotationBuilder 注解式Mapper
4. org.apache.ibatis.cache:缓存
缓存功能实现、包含各种缓存装饰器
TransactionalCache 二级缓存功能实现
5. org.apache.ibatis.cursor:游标
实现游标的方式查询数据、游标非常适合处理百万级别的数据查询,
通常情况下不适合一次性加载到内存中
这种方式类似使用SAX解析XML文件
6. org.apache.ibatis.datasource:数据源
数据源 包括jndi数据源、连接池功能
7. org.apache.ibatis.executor:执行器
包含SQL语句执行器,核心功能包

功能包括:
主键生成功能
执行参数解析功能
执行结果集解析功能
SQL执行器
缓存执行器

ErrorContext 错误上下文对象,跟踪所有执行流程
8. org.apache.ibatis.exceptions:mybatis异常
框架异常,常见异常:TooManyResultsException
9. org.apache.ibatis.io :io操作
资源文件读取
10. org.apache.ibatis.jdbc:jdbc
JDBC一些操作

SqlRunner SQL执行
ScriptRunner 脚本执行,可以执行建库语句
在执行测试用例时候用的非常多
11. org.apache.ibatis.lang
这个包只有2个注解 @UsesJava7 @UsesJava8 
使用这个两个注解标识哪些可以使用JDK7 API 哪些可以使用JDK8 API
12. org.apache.ibatis.logging :日志
日志功能,实现多种日志框架的对接

org.apache.ibatis.logging.jdbc 代理所有功能JDBC 操作,
实现了在debug模式下能够输出SQL
13. org.apache.ibatis.mapping :mapper映射java类
配置文件与实体对象的映射功能,Mapper映射、参数映射、结果映射等
14. org.apache.ibatis.parsing : 解析
解析工具包 

GenericTokenParser:解析#{} ${} 这种占位符
XPathParser:XPath形式解析XML
PropertyParser: properties解析器
org.apache.ibatis.plugin
15. org.apache.ibatis.plugin :插件
拦截器功能实现,使用代理模式实现拦截
16. org.apache.ibatis.reflection : 反射包
反射器功能,这个包下实现元数据编程

通过把Java对象转换成 元数据对象MetaObject,然后就可以对元数据对象进行赋值操作,数据库查询结果到Java对象映射就是通过元对象实现
17. org.apache.ibatis.scripting :动态sql脚本执行
动态SQL语言实现,
配置文件中<if> <where> <set> <foreach> <choose>  
功能就是在这个包实现,
借助OGNL表达式,你也可以扩展自己的语言实现功能
18. org.apache.ibatis.session : sql会话
主要实现SqlSession功能,非常核心包
官方注释:
    SqlSession包含了MyBatis工作的所有的Java接口,
    通过这些接口你可以 执行SQL命令(insert\delete\update\select),
    获取Mapper,管理实务
19. org.apache.ibatis.transaction : 事务
事务功能实现,包装了数据库连接,处理数据库连接生命周期包括:连接创建,预编译,提交\回滚和关闭
20. org.apache.ibatis.type 类型处理器
类型处理器,包括所有数据库类型对应Java类型的处理器,
如果要实现自己类型处理器就需要实现包下的基础接口
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容