为什么要看MyBatis源码及源码结构

啃下MyBatis源码系列目录

啃下MyBatis源码 - 为什么要看MyBatis源码及源码结构

啃下MyBatis源码 - org.apache.ibatis.logging包源码分析

啃下MyBatis源码 - org.apache.ibatis.datasource包源码分析

啃下MyBatis源码 - org.apache.ibatis.cache包源码分析

啃下MyBatis源码 - MyBatis核心流程三大阶段之初始化阶段

啃下MyBatis源码 - MyBatis核心流程三大阶段之代理阶段(binding模块分析)

啃下MyBatis源码 - MyBatis核心流程三大阶段之数据读写阶段

啃下MyBatis源码 - MyBatis面试题总结

--------------------------------------------------------------------------------------------------------------------------

目录

1.为什么要去看MyBatis源码?

2.MyBatis源码结构

2.1 源码包功能模块图

2.2 各包详细功能解析


1.为什么要去看MyBatis源码?

        此问题全是出于一个java小白的角度,大佬请自行略过。。。个人感觉阅读源码的前提是java基础最起码需要掌握90%,剩下的10%需要在看源码的过程中查漏补缺,如并发编程,可以不知道synchronized、ReentrantLock等并发锁的底层原理,但最起码要保证写出的Demo代码可以看懂(由于并发编程没学好,导致看MyBatis的Cache模块略青涩。。。)。看源码的好处呢,我感觉有以下几点:

     (1)学习大佬们的编码思想及规范

     (2)学习一些传承下来的设计模式

     (3)实践java基础理论

       1.学习大佬们的编码思想及规范:俗话说的好,站在前人的肩膀上才能尿的更远,阅读源码可以了解大佬们的编程思想,给我印象最深刻的就是MyBatis数据源模块PooledDataSource类,在资源的请求和释放的函数中对null连接的判断(个人感觉很牛逼,也可能是我太菜了)。。。

       2.学习一些传承下来的设计模式:以前看设计模式没有从实际需求入手,从网上背下来一堆概念,背了忘,忘了背,也不知道这些设计模式究竟要解决什么问题。看了MyBatis日志模块,才真正的知道了什么是适配器模式。日志模块需求:MyBatis要对接不同的第三方日志,这些第三方日志都有自己定义好的日志级别且各不相同,那么适配器模式就是解决这个问题的,看完了源码才真正的了解关于适配器模式的描述“为两个不兼容的接口之间的桥梁”这句话的含义。可能一段时间之后MyBatis的源码会忘的渣都不剩,但只要一想起日志模块的需求,就会想起适配器模式。对以后面试也有好处,最起码和面试官有的聊了,可以给面试官举个例子了,不像以前上去就开始背概念(是真的记不住)

        3.实践java基础理论:MyBatis提供了丰富的test测试模块代码,去github上把源码down下来用maven导入,源码随便改,随便写,随便debug,真的不要太爽。

       看源码缺点:对于基础不扎实或者实践能力少的同鞋来说不太友好(没错就是我。。。)

2.MyBatis源码结构

2.1 源码包功能模块图

2.2 各包详细功能解析

org.apache.ibatis.logging:包含所有mapper 接口中用到的注解

org.apache.ibatis.binding:生成mapper 接口的动态代理并进行管理

org.apache.ibatis.builder:

  1. 包含Configuration对象所有构建器,主要包括XML、注解2种方式配置解析
  2. BaseBuilder 构建器基类
  3. XMLConfigBuilder 解析configuration.xml配置文件
  4. XMLMapperBuilder 解析Mapper.xml配置文件
  5. XMLStatementBuilder 解析select\update\delete 标签
  6. MapperAnnotationBuilder 注解式Mapper

org.apache.ibatis.cache:

  1. 缓存功能实现、包含各种缓存装饰器
  2. TransactionalCache 二级缓存功能实现

org.apache.ibatis.cursor:实现游标的方式查询数据、游标非常适合处理百万级别的数据查询

org.apache.ibatis.datasource:数据源 包括jndi数据源、连接池功能

org.apache.ibatis.executor:

  1. 包含SQL语句执行器,核心功能包
  2. 功能包括:主键生成功能、执行参数解析功能、执行结果集解析功能、SQL执行器、缓存执行器

org.apache.ibatis.exceptions:框架异常,常见异常:TooManyResultsException

org.apache.ibatis.io:资源文件读取

org.apache.ibatis.jdbc:

  1. JDBC一些操作
  2. SqlRunner SQL执行
  3. ScriptRunner 脚本执行,可以执行建库语句

org.apache.ibatis.logging:

  1. 日志功能,实现多种日志框架的对接
  2. org.apache.ibatis.logging.jdbc 代理所有功能JDBC 操作,实现了在debug模式下能够输出SQL

org.apache.ibatis.mapping:配置文件与实体对象的映射功能,Mapper映射、参数映射、结果映射等

org.apache.ibatis.parsing:

  1. 解析工具包
  2. GenericTokenParser:解析#{} ${} 这种占位符
  3. XPathParser:XPath形式解析XML
  4. PropertyParser: properties解析器

org.apache.ibatis.scripting:动态SQL语言实现,配置文件中<if> <where> <set> <foreach> <choose> 功能就是在这个包实现,借助OGNL表达式,你也可以扩展自己的语言实现功能

org.apache.ibatis.session:

  1. 主要实现SqlSession功能,非常核心包
  2. 官方注释:SqlSession包含了MyBatis工作的所有的Java接口,通过这些接口你可以 执行SQL命令(insert\delete\update\select),获取Mapper,管理实务

org.apache.ibatis.transaction:事务功能实现,包装了数据库连接,处理数据库连接生命周期包括:连接创建,预编译,提交\回滚和关闭

org.apache.ibatis.type:类型处理器,包括所有数据库类型对应Java类型的处理器,如果要实现自己类型处理器就需要实现包下的基础接口

  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值