设计模式–DAO模型

发布于 2021-09-15  56 次阅读


DAO是什么

DAO,全称 Data Access Object,数据访问对象。在业务层级中处于业务逻辑层和数据库交互层之间,是用来接受业务中的数据操作请求,并实际操作数据库的对象。本质上,DAO就是把数据操作的sql查询过程、sql操作数据的处理、以及处理数据库连接的这些操作,封装成对DAO对象的操作。

基本架构

DAO模型的核心分为五个模块

  • VO,Value Object,数据对象。其作用是提供数据库数据到编程语言内部对象的一个转换。例如我在数据库里头有一个Teacher表,存放了Teacher相关信息,有很多字段。这种时候我们就可以创建一个TeacherVO,里头有各种成员变量,对应了数据库里的字段,比如数据库中以varChar存了Name字段。我们就在VO里添加一个string类型的Name变量来代表。并提供对应的getter和setter,一个VO就相当于数据库中的一个条目(一行)。在程序的其他部分,我们主要就是操作VO,把VO到数据库字段之间的转换交给DAO完成。
  • DAO,这是一个接口类,或叫做抽象类,作用主要是定义相关的数据操作。同样以Teacher表为例,我们需要实现基本的增删改查,这时候就要在DAO类里头定义相关的接口。例如addTeacher,deleteTeacherById等等。传入的参数就是之前定义的VO类型和一些其他字段类型。
  • DAO-Impl,这是DAO接口的实现类,到这里才真正实现那些实际的增删改查操作,针对定义的接口,例如增删改接口,就是解析传入的VO和相关参数,编写对应的sql语句,与数据库api进行交互。而查询接口,就是组合查询条件,编写sql语句,对于数据库api的返回值,封装成VO并返回。
  • DAO-proxy,同样需要实现DAO接口,这是一个代理类,在这里才真正实例化数据库的连接和DAOImpl对象。DAO-Impl中实现的是通用的数据库操作语句,但并没有绑定实际的数据库连接。在这个代理类中,我们负责传递真正的有效数据库连接实例给Impl实例,然后完成相关操作。
  • DAO-Factory,DAO工厂类,当一个工程中有多个DAO时,使用工厂类提供统一的DAO实例接口。

此外DAO模型还有相关底层模块

  • 数据库连接类,是一个抽象类,负责提供统一的数据库连接接口,包括数据库连接的建立,删除等。
  • 具体类型的数据库连接类,由于不同数据库的api和驱动程序都不同,需要各自实现。
  • 具体类型的数据库连接池,负责维护数据库连接,对外暴露获取连接的接口。

在实际业务中还会添加另一种意义的VO - ViewObject,其作用是用于前后端数据交互,专用于展示层的VO,同样就是把前后端交互的数据,可能是json,封装成编程语言内部对象。

业务结构图:


当其他人都认为你要鸽的时候,你鸽了,亦是一种不鸽