在学习数据访问层之前,需要了解的一个术语:持久化。持久化是将程序中的数据在瞬时状态和持久状态间转换的机制。
持久化的主要操作包括:保存、删除、修改、读取和查找等。
DAO模式
DAO(DataAccessObjece,数据存取对象),是指位于业务逻辑和持久化数据之间实现对持久化数据的访问。
DAO模式的优势,在于它实现了两次隔离。
- 隔离了数据访问代码和业务逻辑代码。业务逻辑代码直接调用DAO方法即可,完全感觉不到数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低了耦合性,提高了可复用性。
- 隔离了不同数据库实现。采用面向接口编程,如果底层数据库变化,如由SQL Server变成Oracle,只要增加DAO接口的新实现类即可,原有SQL Server实现不用修改。这符合“开–闭”原则,降低了代码的耦合性,提高了代码扩展性和系统的可能性。
DAO模式主要由以下几个部分组成:
- DAO接口:把对数据库的所有操作定义成抽象方法,可以提供多种实现。
- DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现。
- 实体类:用于存放与传输对象数据。数据类型、名称与数据库一一对应。
- 数据库连接和关闭工具类:避免了数据库连接和关闭代码的重复使用,方便修改。
分层开发
优势:
- 每一层专注与自己的功能实现,便于提高质量。不同层次的关注点是不同的,数据访问层主要是数据库访问,业务逻辑层的重点是业务逻辑,前端表示层专注于页面的布局和美观。
- 便于分工协作,从而提高效率。一旦定义好各个层次之间的接口,每个开发人员的任务得到了确认,不同层次的开发人员就可以各司其职、齐头并进,从而大大加快开发进度。
- 便于代码复用。每个模块一旦定义好统一的对外接口,就可以被各个模块调用,而不用对相同的功能进行重复开发。例如,不同的业务逻辑模块如果需要对相同数据库表进行操作,无须各自开发相应的DAO模块,复用即可。
- 便于程序扩展。例如,DAO模式中采用面向接口编程,底层数据库发生变化,可以通过增加接口的新实现类解决,实现无损替换,而不是修改原有代码,便于程序扩展。
分层的原则:
- 每一层都有自己的职责。例如硬件负责存储、运算、通信等;而操作系统负责管理硬件;应用软件工作在操作系统上,实现业务功能,满足用户需求。
- 上一层不用关心下一层的实现细节,上一层通过下一层提供的对外接口来使用起功能。例如应用软件不需要知道操作系统是如何管理硬件的,而操作系统也无需关心硬件的具体生产流程。
- 上一层调用下一层的功能,下一层不能调用上一层功能。下一层为上一层提供了服务,而不能使用上一层提供的服务。
分层的其他原则:
- 封装性原则:简单而言,就是每个层次向外提供公开统一接口,而隐藏内部的功能实现细节,其他层次不能也没必要了解其内部细节。
- 顺序访问原则:下一层为上一层提供服务,而不使用上一层的服务。业务逻辑层可以访问数据访问层的功能,而数据访问层不能访问业务逻辑层的功能。
使用实体类传递数据
- 实体类的属性一般使用private修饰。
- 根据业务需要和封装性要求对实体类的属性提供getter/setter方法,负责属性的读取和赋值,一般使用public修饰。
- 对实体类提供无参构造方法,根据业务需要提供相应的有参构造方法。
- 实体类最好实现java.io.Serializable接口,支持序列化机制,可以将该对象转换成字节序列而保存在磁盘上或在网络上传输。
- 如果实体类实现了java.io.Serializable接口,就应该定义属性serialVersionUID,解决不同版本之间的序列化问题。