mybatis 调用存储过程_架构成长之路:透彻理解MyBatis设计思想及手写实现MyBaits框架...

前言

MyBatis,曾经给我的感觉是一个很神奇的东西,我们只需要按照规范写号XXXMapper.xml以及XXXMapper.java接口。要知道我们并没有提供XXXMapper.java的实现类,MyBatis到底是怎么做到这一点的呢?有人会说是动态代理,现在我就来通过手写一个迷你版的MyBatis来彻底理解它的设计思想!同时还配套了手写MyBatis框架视频教学,有需要的朋友可以私信回复我【视频】即可免费获取,诚意满满,无套路!!!

如果你对手写RPC感兴趣,请参考:

《纯手写实现高可用的RPC框架,Java架构师必备技能》

如果你对Spring MVC感兴趣,请参考:

《携程Java架构师手把手教你手写SpringMVC,剑指优秀开源框架灵魂》

如果你对Tomcat感兴趣,请参考:

《还不清楚原理就晚了,Java技术大咖带你手写Tomcat》

动手写一个迷你版的MyBatis

50ea2d38424a2fbd69e189fbb64b4c70.png

MyBatis原理架构图

其实对于MyBatis最为关键的就在于:

XXXMapper mapper = sqlSession.getMapper(XXXMapper.class);

大家可以以这个为切入口,进行源码跟踪,容易得到上面的调用链。

我们先来看一下迷你版MyBatis的整体框架思路:

d21725d0caa4b7f7da0666cafce0d7a9.png

迷你版MyBatis

执行器MyExecutor:

6c79342a9f86d0a7ba0ce2ad6e4a7d95.png

MyExecutor提供query方法

在MyBatis中,比如说select有多种形式,比如selectOne,selectList,那么其实到最后,还是向JDBC发出一个SQL而已。对于执行器而言,其实对于查询,提供一个query接口就可以了。

这里,为了简便,直接执行已经处理好的SQL语句(动态SQL以及输入类型,这不是迷你版MyBatis关心的)。另外执行器的实现类MyBaseExecutor其实就是一段JDBC的操作代码。

994552575b9a899aea532edfbf5f908c.png

query的JDBC实现

这里为了简化处理,在RequestMapping这块硬编码了。

StudentMapper.java/StudentMapper.xml:

52300c90cea7af555626a4dc44e432e7.png

Mapper接口

31666b8de2bb21e76e6cbf0bd0834fb5.png

Mapper.xml

这里,为了不牵涉到XML的解析过程,直接提供已经处理完毕的结果。其实就是namespace/statementID/SQL的存储、映射。

对外暴露的API接口(MySqlSession):

23b291907d175fb1679d41b937296669.png

MySqlSession

eb7790597d76ee15cdae5a478a24b0ce.png

MySqlSession实现

从这里,你能够看到一些端倪:

第一,MyDefaultSqlSession持有执行器的引用,调用selectOne等方法,就是在调用执行器的query方法。

第二,在getMapper的获取过程中,我们看到了具体业务处理Handler的身影:MyMapperProxy,根据JDK动态代理的知识,我们知道,最终都是要回调Handler的invoke方法完成的。

MyMapperProxy:

269c0591df6af30f4359aa14ffc1662f.png

MyMapperProxy

当invoke方法被调用时,我们根据调用的方法,进行反射,得到namespace以及对应的SQL,然后,我们把SQL交给sqlSession进行执行即可。

启动测试类Bootstrap:

0ee6a0be5caf2b53247a524b953976a3.png

Bootstrap

看到没有,我们完全通过自己的类,自己的理解,去实现了和MyBatis一样的功能!

OK,一个迷你版的MyBatis就竣工了,哈哈~

手写的MyBatis框架视频教学分享

为了方便大家学习,在这里还是免费分享一下这位大咖的手写MyBatis框架视频给大家,提供大家学习观看,有需要的朋友希望能得到你们的转发关注支持一下,后续还会更新更多手写系列文章及视频免费分享给大家!

视频免费获取方式:转发+关注后,私信回复我【视频】即可免费领取这份视频资料及上面提到的手写系列视频资料,我会一一回复下载链接给私信的朋友!

deff6219108e507efa4d821dd540278e.png

视频教学截图

更多学习资料分享

814f32c5b1af4f994aa3e62202ab21a2.png

更多视频笔记分享

5e16dc2f156b8f197f0fa9daed2a143f.png
d31ee2a634ad5195233feaa859cb7b0c.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值