写点什么

浅入浅出 mybatis(四)

作者:ES_her0
  • 2022 年 7 月 14 日
  • 本文字数:676 字

    阅读完需:约 2 分钟

前文简要的描述了 mybatis 的初始化部分,我们了解了 mybatis 是如何读取 xml,加载配置,到解析 sql 完成操作的全过程,然后简要聊都了整个 mybatis 的结构层级。今天开始先从边缘模块开始,逐渐了解整个 mybatis。第一个模块是 exception 包,这个几乎没有业务上的依赖,相对来说是最简单的。


首先并不是所有的异常类都在 exception 包中,exception 包中只定义了父类和异常工厂方法。这里有一个小细节,通常我们都分包会有 2 种原则:

  • 按功能,同一功能类型的放一起

  • 按业务,做同一个业务的放一起


这两者各有利弊,纯粹的按照功能分,会导致同一个业务的类散落在各处,跟踪起来会显的很乱。纯粹按业务就会各种不同分工的类都在一个包里,同一个包就像一个大杂烩,很难统一管理和复用。通常情况下,我们是两者结合使用,业务分在同一个包中,工具类都聚合在一起。


下面是 exception 包的类图:

可以看到 IbatisException 是顶级的父类,但是已经被标记废弃了,为什么?因为它除了继承 RuntimeException 什么也没干,也没有业务异常来直接继承它,所以不再使用了。PersistenceException 虽在这图里是二当家,但掌握实权,可以说是 mybatis 中绝大多数类的父类了。TooManyResultsException 只用在一个地方,但也出现在 exception 包中我也比较诧异。另外一个 ExceptionFactory 相对独立,但也是给 PersistenceException 打工的,他的作用就是生成 PersistenceException 的工厂,不过是将业务的异常信息,异常栈传递的 PersistenceException 的构造方法。


下面是全部的 mybatis 异常了:


最终都是以 PersistenceException 的形式展现出来,其余都是根据内部业务定义的各类异常,是不是看起来也没什么复杂的。

用户头像

ES_her0

关注

还未添加个人签名 2018.03.21 加入

还未添加个人简介

评论

发布
暂无评论
浅入浅出mybatis(四)_7月月更_ES_her0_InfoQ写作社区