MyBatis 源码分析(五):异常模块

1、前言

上一篇我们解了Mybatis解析器模块,本篇我们来了解反射模块。本文,我们来分享 MyBatis 的异常模块。

对应 exceptions 包,如下图所示:

29d4c9c730d11fa64c68b8056a8622fd.png

在 MyBatis源码分析(二):项目结构 中,简单介绍了这个模块:

定义了 MyBatis 专有的 PersistenceException 和 TooManyResultsException 异常。

实际上,MyBatis 不仅仅在 exceptions 包下有异常,在其他包下也有异常,整体如下类图:

6acb070c543723744769dc1c6da9bb7f.png

2、源码分析

2.1、exceptions 包

2.1.1 IbatisException

org.apache.ibatis.exceptions.IbatisException ,实现 RuntimeException 类,IBatis 的异常基类。代码如下:

@Deprecated
public class IbatisException extends RuntimeException {private static final long serialVersionUID = 3880206998166270511L;public IbatisException() {super();}public IbatisException(String message) {super(message);}public IbatisException(String message, Throwable cause) {super(message, cause);}public IbatisException(Throwable cause) {super(cause);}}
  • 实际上,IbatisException 已经在 2015 年被废弃,取代它的是 PersistenceException 类。

2.1.2、 PersistenceException

org.apache.ibatis.exceptions.PersistenceException ,继承 IbatisException 类,目前 MyBatis 真正的异常基类。代码如下:

public class PersistenceException extends IbatisException {private static final long serialVersionUID = -7537395265357977271L;public PersistenceException() {super();}public PersistenceException(String message) {super(message);}public PersistenceException(String message, Throwable cause) {super(message, cause);}public PersistenceException(Throwable cause) {super(cause);}}

2.1.3 ExceptionFactory

org.apache.ibatis.exceptions.ExceptionFactory ,异常工厂。代码如下:

public class ExceptionFactory {private ExceptionFactory() {// Prevent Instantiation}/*** 包装异常成 PersistenceException** @param message 消息* @param e 发生的异常* @return PersistenceException*/public static RuntimeException wrapException(String message, Exception e) {return new PersistenceException(ErrorContext.instance().message(message).cause(e).toString(), e);}}

2.1.4、 TooManyResultsException

org.apache.ibatis.exceptions.TooManyResultsException ,继承 PersistenceException 类,查询返回过多结果的异常。期望返回一条,实际返回了多条。代码如下:

public class TooManyResultsException extends PersistenceException {private static final long serialVersionUID = 8935197089745865786L;public TooManyResultsException() {super();}public TooManyResultsException(String message) {super(message);}public TooManyResultsException(String message, Throwable cause) {super(message, cause);}public TooManyResultsException(Throwable cause) {super(cause);}}

2.2、parsing 包

2.2.1、 ParsingException

org.apache.ibatis.parsing.ParsingException ,继承 PersistenceException 类,解析异常。代码如下:

public class ParsingException extends PersistenceException {private static final long serialVersionUID = -176685891441325943L;public ParsingException() {super();}public ParsingException(String message) {super(message);}public ParsingException(String message, Throwable cause) {super(message, cause);}public ParsingException(Throwable cause) {super(cause);}}

2.3.其它包

实际上,我们会看到其他包,会和 parsing 包一样,都会定义其独有的异常类。但是,代码都是相同的。所以,这里就简单整理如下:

  • reflection 包:ReflectionException
  • logging 包:LogException
  • builder 包:BuilderException、IncompleteElementException
  • scripting 包:ScriptingException
  • binding 包:BindingException
  • type 包:TypeException
  • session 包:SqlSessionException
  • cache 包:CacheException
  • transaction 包:TransactionException
  • datasource 包:DataSourceException
  • executor 包:ResultMapException、ExecutorException、BatchExecutorException
  • plugin 包:PluginException

3、总结

本文我讲解了Mybatis的异常模块,该模块的代码逻辑还是比较清晰简单,大家一定要多多调试哦!


Mybatis源码解析传送门:

MyBatis源码分析(一):搭建调试环境

MyBatis源码分析(二):项目结构

MyBatis源码分析(三):解析器模块

MyBatis 源码分析(四):反射模块

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/336142.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python处理字符串-正则提取遇到的第一个完整括号内容处理后替换

1.场景分析 该场景介绍如何用python语言,使用正则表达式处理字符串内第一个完整的括号内容,一个括号内可能会含有一个括号,多个括号自行扩展正则即可,处理完成后再替换到括号的内容 2.重难点 第一个括号内可能会还有另一个括号 …

使用 Process Explorer 和 Windbg 排查软件线程堵塞问题

目录 1、问题说明 2、线程堵塞的可能原因分析 3、使用Windbg和Process Explorer确定线程中发生了死循环 4、根据Windbg中显示的函数调用堆栈去查看源码,找到问题 4.1、在Windbg定位发生死循环的函数的方法 4.2、在Windbg中查看变量的值去辅助分析 4.3、是循环…

U盘、硬盘无法打开,修复RAW磁盘或分区,硬盘变成raw格式如何恢复,数据恢复

本文持续更新,针对遇到的数据丢失问题进行详细记录 磁盘变成RAW的可能原因 突然断电或关机文件系统丢失或损坏病毒或恶意软件感染坏扇区磁盘损坏 以下解决方案针对非病毒损坏 通过Windows自带的工具进行恢复(CHKDSK命令) 1.连接硬盘 2.…

少儿编程 2023年12月中国电子学会图形化编程等级考试Scratch编程四级真题解析(选择题)

2023年12月scratch编程等级考试四级真题 选择题 1、运行下列程序后,角色最后的坐标是 A、(180,100) B、(10,100) C、(100,10) D、(100,100) 答案:D 考点分析:考查积木综合使用; 程序中内层循环旋转其实是干扰项,并不会影响坐标值;角色初始的坐标是(0,0),重复执行…

Linux du和df命令

目录 一. df二. du 一. df ⏹用于显示系统级别,磁盘分区上的可用和已用空间的信息 -h:以人类可读的格式显示文件系统大小 ⏹每秒钟监视当前磁盘的使用情况 watch 用于周期性的执行特定的命令-n 1 表示每一秒刷新一次命令执行的结果df -h ./ 表示周期性…

SCT2A27STER:5.5V-100V Vin,4A峰值限流,高效异步降压DCDC转换器,集成200mA LDO

特性: • 5.5V-100V 输入电压范围 • 最大输出电压:30V • 2A 连续输出电流 • 4A峰值电流限制 • 1.2V 1% 反馈电压 • 集成500mΩ 高侧功率 MOSFETs • 可选5V或者3.3V,输出一路200mA LDO • 25uA静态电流,VBIAS连接到高于6V的辅助电源 •…

深入理解 Flink(三)Flink 内核基础设施源码级原理详解

Hadoop 生态各大常见组件的 RPC 技术实现 Flink RPC 网络通信框架 Akka 详解 1、ActorSystem 是管理 Actor 生命周期的组件,Actor 是负责进行通信的组件。 2、每个 Actor 都有一个 MailBox,别的 Actor 发送给它的消息都首先储存在 MailBox 中&#xff0c…

PCL 计算异面直线的距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,PCL 计算异面直线的距离,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 设置直线 A B AB A

2024年1月9日

2024年1月9日09:26:57待在工作室玩千恋万花和登录PTA练习习题 2024年1月9日09:28:02判断素数肯定会成为考试的关键点之一 2024年1月9日15:13:49完成java的复习 2024年1月9日15:16:41判断反馈类型 2024年1月9日15:20:29行列式求系数通过沙路法展开得到 2024年1月9日15:21:1…

浅析ARMv8体系结构:Memory Type

文章目录 内存类型概述Normal内存属性CacheabilityShareability Device内存属性GatheringReorderingEarly Write Acknowledgement 相关参考 内存类型概述 ARMv8内存模型将内存分成了Normal和Device两种类型,不同的内存类型支持的属性也存在差异,其中&am…

HTML---JQurey的基本使用

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 本章目标 (1)能够搭建jQuery开发环境 (2)使用ready( )方法加载页面、掌握jQuery语法 使用addClass( )方法和css( )方法为元素添加CSS样式使用n…

文心一言 VS 讯飞星火 VS chatgpt (175)-- 算法导论13.3 4题

四、用go语言,Teach 教授担心 RB-INSERT-FIXUP可能将 T.nil.color 设为 RED,这时,当 z 为根时第1行的测试就不会让循环终止。通过讨论 RB-INSERT-FIXUP永远不会将 T.nil.color 设置为 RED,来说明这位教授的担心是没有必要的。 文…