导读:阅读源码是提升自己代码能力的一个非常重要的手段,但是源码阅读有时候也非常麻烦,一定要找到入口点,然后动态地去看代码,一步步调试然后画图做笔记记录,才能在一团乱中清理出一个道路来。这篇文章介绍了我在阅读Mybatis源码的准备过程。
Mybatis简介
mybatis是一个流行的半自动映射框架,之所以称为半自动框架是因为它需要手工匹配Java类,SQL和映射关系,而全表映射的Hibernate只需要提供POJO和映射关系就可以了。区别如下表:
通过上表也可以看出,Hibenate无需编写SQL,所以开发效率优于Mybatis.此外,它提供缓存、日志、级联等功能。但是缺点也是十分明显,多表关联复杂的SQL,根据条件变化的SQL。存储过程等场景使用Hibenate非常不便,而性能又难以通过SQL优化。所以注定Hibernate只适用于场景不太复杂,要求性能不太苛刻的时候使用。如果你需要一个灵活的、可以动态生成映射关系的框架,那么MyBatis是一个最好的选择。
MyBatis组件以及执行基本流程
SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码生成SqlSessionFactory(工厂接口)
SqlSessionFactory:依靠工厂来生成SqlSession。
SqlSession:是一个既可以发送SQL去执行并返回结果的,也可以获取Mapper接口,通过Mapper接口查询并封装数据。
SQL Mapper:它是MyBatis新设计的组件,它是由一个Java接口和XML文件(或者注解)构成的,需要给出对应的SQL和映射规则。它负责发送SQL去执行,并返回结果。
用下图表达上述组件之间的关联
mybatis源码阅读准备
github上有一个中文注释版的MyBatis源码。MyBatis中文链接
Mybatis是以maven管理的,依赖于Mybatis-parent模块。将mybatis导入到eclipse中时候,也需要将mybatis-parent模块导入。mybatis-parent模块链接
将模块mybatis,mybatis-parent模块导入到Eclipse中,接下来就通过mybatis的最基本的代码来调试并阅读mybatis源码。整个结构如下图。
通过《深入浅出MyBatis技术原理与实战》一书的代码来实现基本调试。代码的目录请看上图,代码的内容下面一一列出。
数据库表role
数据库表role对应的java类
java RoleMapper接口
RoleMapper
MyStringHandler
log4j.properties 配置文件
mybatis-config.xml 配置文件
阅读以及debug入口 (Main)
通过执行Main类,并设立断点,就可以一步一步进行源码的调试以及阅读了。
领取专属 10元无门槛券
私享最新 技术干货