如何深度理解mybatis?( 四 )


主要是分发了下功能, 执行sql语句避免不了有参数和无参数的, 都让调用有参数的方便管理

如何深度理解mybatis?

文章插图

在执行前, 考虑还有一种情况, 用户不是通过接口代理的方式来执行以上方法, 这样手动输入sqlId容易造成错误
这里做一个健壮性判断

如何深度理解mybatis?

文章插图

BaseExecutor中的query以及queryList做的核心工作
首先这两个方法的特点都是查询, 其步骤基本类似, 所以这里可以合并一起转调query0功能

如何深度理解mybatis?

文章插图

这里需要对参数进行设定, 还根据最后isOne的参数决定返回值是否是单个

如何深度理解mybatis?

文章插图

参数设置这里比较复杂我们通过图解的方式来解释, (注: 参数是List集合类型的和数组类型的没有做!!!)

如何深度理解mybatis?

文章插图

对结果的封装主要用到内省技术和数据库元数据等等知识点

如何深度理解mybatis?

文章插图

2.update&delete&insert做的工作

如何深度理解mybatis?

文章插图

BaseExecutor中的update做的核心工作
还是和query&queryList一样需要设置参数, 不管是增删改其本质其结果都是一致

如何深度理解mybatis?

文章插图

3.getMapper代理模式开发的原理
主要使用的动态代理的技术创建接口的实现类, 内部主要整合了sqlId和参数, 省去用户自己拼sqlId拼错的风险
也同时解决用户手动合参数的麻烦, 但是最终工作的还是selectOne,selectList以及update0这些方法

如何深度理解mybatis?

文章插图


如何深度理解mybatis?

文章插图


如何深度理解mybatis?

文章插图

总结自定义mybatis用的技术点
一款框架的诞生肯定不是一蹴而就的, 随着时间慢慢推进逐步更新出来, 所以一款好的框架肯定要经过
很多考验才能够稳定靠谱, 但是纵观整篇用的技术点, 不难发现框架也是由基础代码编写而来,解决大量重复
的工作, 提供扩展性等等机制,比如本篇用核心的技术点有
① 反射
② 内省
③ 解析xml
④ 动态代理
⑤ 工厂设计模式
等等, 感谢大家耐心阅览, 附件有本篇的原码, 如果有更好的建议和想法欢迎和小编一起探讨交流


推荐阅读