版权声明:尊重博主原创文章,转载请注明出处 https://blog.csdn.net/weixin_39020940/article/details/82469905
【前言】
这篇文字不全是讲MyBatis代码,而是博主怎么根据代码系统学习梳理的过程,非专业,如有不对,欢迎指出
MyBatis源码地址:https://github.com/mybatis/mybatis-3/releases
代码分析过程用的代码地图工具参考链接:
https://blog.csdn.net/weixin_39020940/article/details/80633835
【基础知识】
首先,我们需要知道,MyBatis当前大家使用最多的功能是把数据库操作和代码解耦,通过接口类+xml定义sql语句即可实现数据库的操作访问,而对于MyBatis内部,核心的操作是如下两步:
1、xml解析后实例化为对应的sql操作
2、通过java动态代理,拦截接口调用,落地为对应的sql操作
动态代理,例如AOP,更倾向于在接口和实例之间搭建一个桥梁,同时支持一些实例调用前后的一些补充实现,而MyBatis中使用动态代理,则是直接植入式,让接口的实例化直接绑定MyBatis植入的sql实例
(插入全局文件分析)
main.java.org.apache.ibatis.type
Member Variable列下按列查找可以看出,所有类型的Handler实例都被TypeHandlerRegistry所持有,对外主要提供了Jdbc的数据类型到对应类型句柄的获取
public TypeHandler<?> getTypeHandler(JdbcType jdbcType) {
return JDBC_TYPE_HANDLER_MAP.get(jdbcType);
}
(未完待续)