浅入浅出mybatis(四)

这是我参与11月更文挑战的第21天,活动详情查看:2021最后一次更文挑战

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

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

  • 按功能,同一功能类型的放一起
  • 按业务,做同一个业务的放一起

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

下面是exception包的类图:

image.png

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

下面是全部的mybatis异常了:

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

本文转载自: 掘金

开发者博客 – 和开发相关的 这里全都有

0%