Mybatis3 源码解析系列

Mybatis入门到源码解析 MyBatis是一款优秀的基于Java的持久层框架,它内部封装了JDBC,使开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建Statement等繁杂的过程。持久化持久化是将程序数据在持久状态和瞬时状态间转换的机制。(理解一下这个持久状态转化为瞬时状态,持久化是mybatis最重要的特性)即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中、XML数据文件中等等。 阅读详情

简介

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

总结

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

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

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

下面再总结下MyBatis的学习:

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

image.png

最右侧的是全局配置 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(这个在日常开发中经常使用)之类没有去探索,但大致原理看书了解一些,留待以后有空再研究

解析文章目录

Demo 编写

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

参考链接

  • 《MyBatis3源码深度解析》:这本书确实不错,通读一两遍后,自己探索Debug,有很多的帮助
深入解析MyBatis源码与实战 摘要:本文系统解析MyBatis核心架构与实现原理,涵盖配置解析、SQL执行、结果映射三大模块。通过动态SQL生成、缓存机制(一级/二级缓存)、插件开发(Interceptor接口)等典型示例,深入剖析源码实现。结合SpringBoot集成场景,展示CRUD操作、动态SQL拼接、事务管理、多数据源配置等实战方案,并给出批量操作优化(BatchExecutor)、类型处理器扩展等高级特性实现。特别说明流程图关键节点:从SqlSessionFactory构建到Executor执行,通过StatementHand 阅读详情

相关推荐

mybatis3.x源码深度解析与最佳实践.pdf

mybatis3.x源码深度解析与最佳实践.pdf

Mybatis3源码全解析

Mybatis架构: 图自:MyBatis整体架构_tiankong_12345的博客-优快云博客_mybatis架构 Mybatis架构分三层: 第一层:SqlSession 这是使用mybatis的主要接口,通过这个接口我们可以执行命令,获取mapper或者管理事务。 Through this interface you can execute commands, get mappers and manage transactions. 第二层:核心处理层 配置解析模块:myb

MieMieFly的专栏 1316

MyBatis源码分析.pdf

MyBatis源码分析.pdf

MyBatis3源码深度解析(一)搭建MyBatis源码环境

笔者作为一名Java开发人员,工作中的项目几乎都将MyBatis作为持久层框架,但笔者对MyBatis框架的理解仅局限于使用,并不理解框架底层的实现原理。为此,为提升自身编码能力,笔者决定深入学习MyBatis的底层源码,并在优快云发表学习笔记。学习参考书是:MyBatis 3源码深度解析 江荣波 清华大学出版社2002年,iBatis框架发布,引入SQL映射;2010年,iBatis框架改名为MyBatis,迁移到Google Code;2013年,MyBatis迁移到Github。

挑灯日记 记录自己 1564

特征选择(模型输入参数的分析选择)方法汇总

特征选择是模式识别和机器学习领域的重要研究课题之一。为了提高准确率, 人们往往最大限度地提取特征信息。然而, 过大的特征向量维数不仅导致计算成本的增加, 复杂运算也随之带来分类识别率的下降。因此, 通过合适的特征选择算法, 去除无关特征和冗余特征, 获得有助于分类的最优特征子集, 对提高识别性能和降低计算成本具有重要意义。 特征选择主要有两个功能: 减少特征数量、降维,使模型泛化能力更强,减少过拟合 增强对特征和特征值之间的理解 参考资料: 优快云《几种常用的特征选择方法》 知乎《机器学习中,.

David's Tweet 1万+

跟着团子学SAP CO:熟练使用结果分析码实现各个场景下收入成本的匹配(一) KKA2/CJ88

PS模块中对财务顾问最难的点在于项目结算,特别是销售型的项目结算。针对客户型项目结算我列举了以下常见的收入成本匹配的一些场景: (1)在项目执行过程中会多次开票,但由于各期成本浮动很大(如前期可能只涉及一些人工、中期全是比较金额较大的材料费),所以希望开票的时候能通过合理的一些指标进行主营业务成本与主营业务收入的匹配。 (2)项目过程中会多次开票,开票确认主营业务收入时,直接将累计发生的实际成本结转为主营业务成本。 (3)项目过程中虽多次开票,但不确认收入,所有发生的实际成本月末计算为在制品,最后项目一次性

Lucas1211的博客 9533

MyBatis3-源码剖析

MyBatis3-源码剖析

冰点契约的博客 515

纽马克-贝塔法(Newmark-Beta Method)在结构动力学中的应用与实现

本文深入解析了纽马克-贝塔法(Newmark-Beta Method)在结构动力学数值计算中的核心原理与应用。作为经典的时间积分算法,它通过调节γ和β参数,在计算精度、稳定性与效率间取得平衡,尤其适用于地震响应、风振分析等工程场景。文章详细阐述了其数学内核、在有限元分析中的实现步骤,并对比了隐式与显式方案的适用场景,为工程师提供了关键的方法选择与参数调优指导。

weixin_29232121的博客 146

Mybatis 系列3-结合源码解析properties节点和environments节点

【Mybatis 系列10-结合源码解析mybatis 执行流程】 【Mybatis 系列9-强大的动态sql 语句】 【Mybatis 系列8-结合源码解析select、resultMap的用法】 【Mybatis 系列7-结合源码解析核心CRUD配置及用法】 【Mybatis 系列6-结合源码解析节点配置objectFactory、databaseIdProvider、pl...

weixin_30613727的博客 124

第四章 汇川技术InoProShop入门之串口自由协议解读

摘要: 串口自由协议是工业自动化中针对特定需求设计的自定义通信协议,具有高度灵活性和针对性,适用于小型设备、实时控制等场景。其核心包括自定义帧结构(起始符、地址码、数据区、校验位等)和通信规则(波特率、交互机制)。相比标准协议,自由协议效率更高但兼容性弱,设计时需注重可靠性、效率和可扩展性,适用于定制化或高实时性需求,如传感器数据采集或老旧设备改造。典型应用需平衡精简帧结构与抗干扰能力,同时预留扩展空间。

zyfucking2010的博客 2211

多标签分类怎么做?(Python)

首先简单介绍下,多标签分类与多分类、多任务学习的关系: 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

y1282037271的博客 1358

MyBatis源码系列3(解析配置文件,创建SqlSessionFactory对象)

创建SqlSessionFactory;首先读取配置文件,使用构造者模式创建SqlSessionFactory对象。核心:解析xml配置文件,解析的配置文件用Configuration对象保存。创建SqlSessionFactory 时序图。解析顺序与配置文件中的设置信息完全一致。

qq_41163858的博客 535

基于ESP32和OV5640的目标检测系统

本文详细介绍了基于ESP32-S3和OV5640摄像头构建目标检测系统的完整方案。系统采用YOLOv8-Nano轻量级模型,通过INT8量化实现边缘部署,在UXGA分辨率下达到25fps帧率。文章从硬件选型、图像采集优化、模型量化部署、实时推理流水线构建等维度展开,重点解决了内存管理、电源稳定性和异常处理等嵌入式系统关键问题。该方案在资源受限条件下实现了150ms以内的端到端延迟,为物联网视觉应用提供了低成本、低功耗的解决方案,适用于智能家居、工业检测等多个场景。

reset2021的博客 329

Mybatis源码分析(一)- Configuration配置文件详解

本系列以Mybatis 3.3.X分支源码作为分析源,mybatis源码git地址:https://github.com/mybatis/mybatis-3.git。 mybatis的所有配置信息都存储到org.apache.ibatis.session.Configuration类中,可通过xml配置或者手动实例化获取到Configuration信息。Configuration类中属性定义主要

einarzhang的专栏 3394

caverdock如何使用,一文给你多方案教学!

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 1384

无人机——电机篇(一)

1. 电机的定义 电机俗称“马达”,是无人机的动力来源,无人机通过改变电机的转速来改变无人机的飞行状态。即改变每个电机的速度,使得无人机能够盘旋空中,上升或下降,或向各个方向移动。2. 电机的分类 电机分为:“无刷电机”和“有刷电机” - 无刷电机:是采用半导体开关器件来实现电子换向,具有可靠性高、低干扰、低噪声低、寿命长等优点。一般应用在稍大型的飞行器,载重大,可以有更广泛的用途。 - 有刷电机:是内含电刷装置的将电能转换成机械能(电动机)或将机械能转换成电能(发电机)的旋转电机。有刷电机是所有电机的基

weixin_46066938的博客 1万+

修改mybatis-generator-1.3.2源码实现自定义代码生成详解

修改mybatis-generator-1.3.2源码实现自定义代码生成详解(一) http://www.blogjava.net/bolo/archive/2015/03/20/423683.html 修改mybatis-generator-1.3.2源码实现自定义代码生成详解(二) http://www.blogjava.net/bolo/archive/2015/08/31/4

lahand的博客 1029

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【源码系列】MyBatis原理源码

Mybatis的核心是Jdk的动态代理和各个组件,整个运行可以分为两大步骤: 1. 准备阶段 1. 解析配置文件获取全局Configuration对象,该过程中为每个Mapper接口创建MapperProxyFactory对象, 2. 有了Configuration对象以后通过构建者模式构建SqlSessionFactory 3. 通过SqlSessionFactory创建SqlSession对象,SqlSession包含了Executor(Sql的执行器),如果有插件,Executor会织入插件逻辑(通

苏雨丶 6313

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring源码解析(十):spring整合mybatis源码

通过sqlSession获取对应的代理对象代理对象执行sql完成数据库操作// 1.解析XML配置// 2.基于解析好的XML配置创建一个SqlSessionFactory// 3.通过SqlSessionFactory,创建一个SqlSession// 4.获取一个代理对象// 5.调用代理对象的方法System.out.println("代理对象查询结果:" + mapper.selectOne(1));根据@MapperScan注解扫描指定路径下接口。

从基础到源码解析的学习记录 1273

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Mybatis源码解析

mybatis的流程分析

WinnerBear的博客 5218

mybatis源码解析-xml文件的解析

mybatis源码解析xml文件的流程

m0_54258715的博客 1285

《MyBatis3源码深度解析》图书简介

一、图书封面 二、书籍目录 前言 4 第1篇 Mybatis3源码 7 第1章 搭建Mybatis源码环境 7 1.1 Mybatis3简介 7 1.2 环境准备 7 1.3 获取Mybatis源码 8 1.4 导入Mybatis源码到IDE 10 1.5 HSQLDB数据库简介 13 1.6 本章小结 16 第2章 JDBC规范详解 17 2.1 JDBC API简介 17 2.1.1 建立数...

Coding... 4620

mybatis源码解析(mybatis plus)

mybatis plus源码解析

何忆清风 2043

MyBatis系列之Mybatis源码解读

MyBatis的发展历程以及基本使用,详见 Mybaits系列之MyBatis的发展之路,怎么用好MyBatis MyBatis工作流程分析 全局配置文件 mybatis-Config.xml --> Mappr.xml -->Configuration填充配置类 -->SqlSessionFactory(生成session工厂) -->SqlSession(生...

qq_40111437的博客 1372

Mybatis源码解析优秀博文

最近阅读了许久的mybatis源码,小有所悟。同时也发现网上有许多优秀的mybatis源码讲解博文。本人打算把自己阅读过的、觉得不错的一些博文列出来。以此进一步加深对mybatis框架的理解。其实还有一个目的是,本人也想写一系列博文来分享自己对mybatis的理解。然而。个人文笔太差,列出的这些别人的文章我也会细心研读,并希望在阅读这些文章的同时既加深我对mybatis的理解,又能探索出一种更加通俗

lhever_的博客 3万+
上一篇: MyBatis Demo 编写(2)结果映射转换处理
下一篇: Android 监控手机应用使用情况
_萧_
博客等级 码龄10年 55粉丝 157原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值