mybatis源码解读

mybatis基本上都在用,我们来了解它的源码和实现

我看Mybatis源码的经验分享给大家,大家可以参考,

1,我们首先把源码下载,https://github.com/tuguangquan/mybatis 

这个是他人做了中文注释的源码,下载到本地。 

2,导入mybatis-parent模块,快速入口

3,pom中有个PDF的插件引用去掉,这样,mybatis源码环境就可以了

怎么看这些源码了:

网上找了一些资料:下面是mybaits的包结构和作用

1.兵马未动,日志先行
org.apache.ibatis.logging
org.apache.ibatis.logging.commons
org.apache.ibatis.logging.jdbc
org.apache.ibatis.logging.jdk14
org.apache.ibatis.logging.log4j
org.apache.ibatis.logging.log4j2
org.apache.ibatis.logging.nologging
org.apache.ibatis.logging.slf4j
org.apache.ibatis.logging.stdout
对象适配器设计模式
设计模式可参考http://www.cnblogs.com/liuling/archive/2013/04/12/adapter.html

2.异常
org.apache.ibatis.exceptions

3.缓存
org.apache.ibatis.cache
org.apache.ibatis.cache.decorators
org.apache.ibatis.cache.impl

4.解析
org.apache.ibatis.parsing
xml解析,${} 格式的字符串解析
源码分析可以参考http://www.cnblogs.com/sunzhenchao/p/3161093.html

5.类型处理器
org.apache.ibatis.type
实现java和jdbc中的类型之间转换
源码分析可以参考http://www.cnblogs.com/sunzhenchao/archive/2013/04/09/3009431.html

6.IO
org.apache.ibatis.io
通过类加载器在jar包中寻找一个package下满足条件(比如某个接口的子类)的所有类

7.反射
org.apache.ibatis.reflection
org.apache.ibatis.reflection.factory
org.apache.ibatis.reflection.invoker
org.apache.ibatis.reflection.property
org.apache.ibatis.reflection.wrapper
可以参考MetaObjectTest来跟踪调试,基本上用到了reflection包下所有的类

8.数据源
org.apache.ibatis.datasource
org.apache.ibatis.datasource.jndi
org.apache.ibatis.datasource.pooled
org.apache.ibatis.datasource.unpooled

9.事务
org.apache.ibatis.transaction
org.apache.ibatis.transaction.jdbc
org.apache.ibatis.transaction.managed

10.会话
org.apache.ibatis.session
org.apache.ibatis.session.defaults

11.jdbc单元测试工具
org.apache.ibatis.jdbc

12.构建
org.apache.ibatis.builder
org.apache.ibatis.builder.annotation
org.apache.ibatis.builder.xml

13.映射
org.apache.ibatis.mapping

14.脚本
org.apache.ibatis.scripting
org.apache.ibatis.scripting.defaults
org.apache.ibatis.scripting.xmltags

15.注解
org.apache.ibatis.annotations

16.绑定
org.apache.ibatis.binding

17.执行器
org.apache.ibatis.executor
org.apache.ibatis.executor.keygen
org.apache.ibatis.executor.loader
org.apache.ibatis.executor.loader.cglib
org.apache.ibatis.executor.loader.javassist
org.apache.ibatis.executor.parameter
org.apache.ibatis.executor.result
org.apache.ibatis.executor.resultset
org.apache.ibatis.executor.statement

18.插件
org.apache.ibatis.plugin

但是看这些去看代码,没有很深的功底很难看到。

其实网上很多的开源组件都有test包 ,这些都能很好的帮我们去读懂mybatis

通过跑这些测试用例,大概的mybaits的流程我觉得是这样

1,首先,我们启动应用,myatis的io包根据其配置信息,生成configuration配置类,

可以见org.apache.ibatis.binding.BindingTest类的setup方法,最后得到sqlSessioinFactory.

sqlSessioinFactory里就有mybatis的一些配置,po别名,po数据封装类,注意这里注册这些都是类名,

不是实例,对象,因为到时候我们真正通过这些来生成代理对象,来操作数据。

2,先将test下的log4j日记级别改成DEBUG.     log4j.logger.org.apache.ibatis=DEBUG

调试org.apache.ibatis.binding.BindingTest类的shouldSelectBlogWithPostsUsingSubSelect方法

一步步调试,这样我们就能慢慢理解mybatis的整个设计思路和各个包的作用。

下面是我根据调试大概得到的mybatis的设计思路流程图

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值