8.1 JDBC的封装
使用JDBC技术奖程序中的数据持久化保存到MySQL数据库以及使用Java程序对数据库中的持久化操作,包括保存、删除、修改、读取和查找等。
从DAO模式使用可以看出,DAO模式的优势就在于他实现了两次隔离。
(1) 隔离了数据访问代码和业务逻辑代码,业务逻辑代码直接调用DAO方法即可,完全感觉不带数据库表的存在。分工明确,数据访问层代码变化不影响业务逻辑代码,这符合单一职能原则,降低耦合性,提高了可复用性。
(2) 隔离了不同数据库实现,采用面向接口编程,如果底层数据库变化,如由MySQL变成Oracle,只要增加DAO接口的新实现类即可,原有MySQL实现不用修改。这符合”开-闭”原则,减低了代码的耦合性,提高了代码扩展性和系统的可移植性。
一个典型的DAO模式主要有一下几部分组成:
(1) DAO接口:把对数据库的所有操作定义成抽象方法,可以提供多种实现。
(2) DAO实现类:针对不同数据库给出DAO接口定义方法的具体实现。
(3) 实体类:用不存放于传输对象数据。
(4) 数据库连接和关闭工具类:避免了数据库连接和关闭代码的重复使用,方便修改。
8.2 Properties类
Properties类,它可以实现读取Java配置文件,这样我们就可以把常用的配置信息卸载配置文件中方便维护和修改。
8.2.1 properties配置文件
Java中的配置文件常为properties文件,格式为文本文件,文件内容的格式是”键 = 值”格式,注释信息可以用”#”来注释。例如,添加名为database.properties的数据库配置文件,步骤如下。
1) 添加 .properties 文件
在MyEclipse中选中项目src文件夹右击,在弹出的快捷菜单中选择”New” → “File”命令,在打开”新建文件”窗口中输入database.properties,单机”finish”按钮,也可以创建一个文本文件改名为database.properties(扩展名为.properties),复制粘贴带项目目录中。
2) 添加文件内容
向配置文件中添加配置信息。如:
driver = com.mysql.jdbc.Driver |
8.2.2 读取配置文件
Java中提供了Properties类来读取配置文件。Properties类位于Java.util包中,继承自Hashtable类,如表:
Properties类的常用方法
方法 |
描述 |
String getproperty(String key) |
用指定的键在此属性列表中搜索属性,通过参数key得到其所对应的值。 |
Object setProperty(String key,String value) |
调用Hashtable的方法put,通过调用基类的put( )方法来设置键-值对 |
void load(InputStream inStream) |
从输入流中读取行列表(键和元素对),通过对指定文件进行装载获取该文件所有键-值对 |
void clear() |
清楚所装载的键-值对,该方法有基类Hashtable提供 |
8.3 使用实体类传递数据
数据访问代码和业务逻辑代码之间通过实体类来传输数据,把相关信息使用实体类封装后,在程序中吧实体类作为方法色输入参数或返回结果,实现数据传递非常方便。
8.3.1 实体类的特征
关于实体类,主要有一下特征。
(1) 实体类的双属性一般使用private修饰。
(2) 根据有任务需要和封装性要求对实体类的属性提供getter / setter方法,负责属性的读取和赋值,一般使用public修饰。
(3) 对实体类提供无参构造方法,根据业务需要提供相应的有参构造方法。
(4) 实体类最好事先java.io.Serializable接口,支持序列化机制,,可以将该对象转换成字节序列而保存在磁盘上或在网络上传输。
(5) 如果实体类实现了java.io.Serializable接口,就应该定义属性serialVersionUID,接解决不同版本之间的序列化问题。
本站总结
(1) 持久化是将程序中数据在瞬时状态和持久状态间转换的机制。JDBC是一种持久化机制,将程序直接保存文本文件也是持久化机制的一种实现。
(2) DAO就是DataAccess Objects(数据存取对象),位于业务逻辑和持久化数据之间,实现对持久化数据的访问。
(3) DAO模式提供了访问关系型数据库系统所需的操作接口,将数据访问和业务逻辑分离,对上层提供面向对象的数据访问接口。
(4) 一个典型的DAO模式主要由DAO接口、DAO实现类、实体类组成,基于代码复用考虑,通常创建一个是数据库连接和关闭工具类。
(5) 数据访问代码和业务逻辑代码之间通过实体类传输数据。在程序中把实体类作为方法的输入参数放回结果,实现数据的传递,非常方便。