简介

Mybatis作为一个优秀的Java持久化框架,在我们的日常工作中相信都会用到,本次源码解析系列,就开始探索下Mybatis

总结

在MyBatis的学习中,首先通读了《MyBatis3源码深度解析》一遍,然后抱着如何去写一个基本功能的MyBatis框架的想法,又读了2-3遍

心中有了大致的想法,然后再去通过MyBatis的示例去走一遍源码,注重关注了一些在写Demo中可能会遇到的细节点

后面花了两三天的时间,把基本功能的框架Dome给写了出来,各个感觉还是可以的,达到了自己预期的目标

下面再总结下MyBatis的学习:

下面一个图,来源于:《MyBatis3源码深度解析》基本涵盖了MyBatis的核心:

最右侧的是全局配置 Configuration:这里负责前期Mapper的解析和TypeHandler注册相关的,在初始化阶段,把在后期SQL查询前的参数解析和结果转换时需要用到的东西先存下来,便于后面获取用于处理

左侧是MyBatis的核心类:

  • SQLSession:可以算是整个Mybatis的入口,数据库源与和Mapper的代理对象从这里进行获取
  • Executor:语句执行入口
  • StatementHandler:可以算是JDBC中对于Statement的封装,主要是语句生成相关方面的处理
  • ParameterHandler:SQL查询时参数转换处理,如果有参数则调用TypeHandler相关逻辑
  • ResultSetHandler:负责SQL结果的处理,如果有返回结果需要处理,则调用TypeHandler相关逻辑
  • TypeHandler:负责JavaType与jdbcType的相关转换

感觉核心逻辑主线就是这些了,自己在Demo中除了ParameterHandler没有进行实现,其他基本都有体现

当然,读代码时候发现,细节还是挺多的,还有很多的地方没有仔细去研究,目前就简单看了下,有个印象,方便如果以后遇到问题,也能去定位后,结合问题场景仔细研究

在研究的过程中发现这些数据库的相关的框架,基本都是基于JDBC规范的Statement等去做文章的,比如MyBatis可以结合HikariCP,再结合Shardingsphere,感觉挺有意思,自己之前写过一篇基于这三者做多数据源的文章:ShardingSphere JDBC 分库实现多数据库源。写完还有点懵,现在就知道哪些Bean定义的相关原理和作用,做到了心中有数

本系列有源码解析部分和Demo实现部分,涉及到的范围就是上面的核心逻辑主线部分,还有如动态SQL(这个在日常开发中经常使用)之类没有去探索,但大致原理看书了解一些,留待以后有空再研究

解析文章目录

  • MyBatis3源码解析(1)探索准备
  • MyBatis3源码解析(2)数据库连接
  • MyBatis3源码解析(3)查询语句执行
  • MyBatis3源码解析(4)参数解析
  • MyBatis3源码解析(5)查询结果处理
  • MyBatis3源码解析(6)TypeHandler使用
  • MyBatis3源码解析(7)TypeHandler注册与获取
  • MyBatis3源码解析(8)MyBatis与Spring的结合

Demo 编写

完整的工程已放到GitHub上:https://github.com/lw1243925457/MybatisDemo/tree/master/

  • MyBatis Demo 编写(1)基础功能搭建
  • MyBatis Demo 编写(2)结果映射转换处理

参考链接

  • 《MyBatis3源码深度解析》:这本书确实不错,通读一两遍后,自己探索Debug,有很多的帮助

Mybatis3 源码解析系列相关推荐

  1. Redux 源码解析系列(一) -- Redux的实现思想

    文章来源: IMweb前端社区 黄qiong(imweb.io) IMweb团队正在招聘啦,简历发至jayccchen@tencent.com Redux 其实是用来帮我们管理状态的一个框架,它暴露给 ...

  2. TiKV 源码解析系列文章(二)raft-rs proposal 示例情景分析

    作者:屈鹏 本文为 TiKV 源码解析系列的第二篇,按照计划首先将为大家介绍 TiKV 依赖的周边库 raft-rs .raft-rs 是 Raft 算法的 Rust 语言实现.Raft 是分布式领域 ...

  3. Tomcat源码解析系列二:Tomcat总体架构

    Tomcat即是一个HTTP服务器,也是一个servlet容器,主要目的就是包装servlet,并对请求响应相应的servlet,纯servlet的web应用似乎很好理解Tomcat是如何装载serv ...

  4. prometheus变量_TiKV 源码解析系列文章(四)Prometheus(下)

    本文为 TiKV 源码解析系列的第四篇,接上篇继续为大家介绍 rust-prometheus.上篇主要介绍了基础知识以及最基本的几个指标的内部工作机制,本篇会进一步介绍更多高级功能的实现原理. 与上篇 ...

  5. TiKV 源码解析系列 - Raft 的优化

    这篇文章转载TiDB大牛 唐刘 的博客:https://mp.weixin.qq.com/s?__biz=MzI3NDIxNTQyOQ==&mid=2247484544&idx=1&a ...

  6. Netty 源码解析系列-服务端启动流程解析

    netty源码解析系列 Netty 源码解析系列-服务端启动流程解析 Netty 源码解析系列-客户端连接接入及读I/O解析 五分钟就能看懂pipeline模型 -Netty 源码解析 1.服务端启动 ...

  7. MyBatis3源码解析(6)TypeHandler使用

    简介 在上几篇中,介绍了MyBatis3对参数和结果的解析转换,对于常规数据类型,默认的处理已经足够应付了,但日常开发中会有一些特殊的类型,就可以通过TypeHandler来进行处理 示例准备 本篇文 ...

  8. MyBatis3源码解析(5)查询结果处理

    简介 上篇中解析了MyBatis3中参数是如何传递处理的,本篇接着看看在获取到查询结果后,MyBatis3是如何将SQL查询结果与我们接口函数定义的返回结果对应的 源码 获取结果后处理的入口 在:My ...

  9. MyBatis3源码解析(3)查询语句执行

    简介 上篇探索了MyBatis中如何获取数据库连接,本篇继续探索,来看看MyBatis中如何执行一条查询语句 测试代码 本篇文中用于调试的测试代码请参考:MyBatis3源码解析(1)探索准备 完整的 ...

最新文章

  1. python绘图函数
  2. python hmac
  3. tensordot 的源码解读
  4. 20140328项目日志
  5. XslTransform.Transform方法将结果输出到字符串
  6. JavaScript---详解cookie
  7. 一个架构的演化2--用ESB集成
  8. Div1 小A抓小B tarjan双连通分量缩点+dfs
  9. 如何在 MacOS 环境下搭建 SVN 服务端环境
  10. 深度学习pytorch基础入门教程(1小时)-自动梯度
  11. dstat 性能监测工具
  12. 杰克·韦尔奇的101条经典语录
  13. 关于ESAPI获取资源文件问题
  14. Blast2GO使用方法详解(命令界面
  15. 香农采样定理和奈奎斯特采样定理
  16. 美团C++软件开发笔试题
  17. FIP: A fast overlapping community-based influence maximization algorithm using probability coefficie
  18. 单纯的一个复杂的json例子
  19. 安装部署VMware vSphere 为IBM x3850 X5服务器安装配置VMware ESXi
  20. 1063 计算谱半径(JAVA)

热门文章

  1. Jquery各种前台效果JQ
  2. spring,mybatis事务管理配置与@Transactional注解使用[转]
  3. IOS的Target-action 设计模式
  4. Financial Terminology - Shares, Stock, Equity,Security
  5. 实现国标GB/T2818视频流媒体解决方案EasyGBS国标GB28181-2016版的sip协议tcp沾包流程说明介绍
  6. [Hadoop] - 异常Cannot obtain block length for LocatedBlock
  7. Several ports (8080, 8009) required by Tomcat v9.0 Server at localhost are already in use.解决方案
  8. Integer与int的区别
  9. FLOATER:更加灵活的Transformer位置编码!
  10. 基于scikit-learn的SVM实战