浅议Java Web程序运用中泛型DAO的作用

Java Web,是运用Java技术解决相关Web互联网领域的技术总和。随着科学技术的不断进步,计算机技术的迅速发展,Java技术也在不断的开发升级中,在Java SE5.0之后,一种新型的机制被引入——泛型。泛型非常适用于集合类,可以使代码具有更好的可读性和安全性。同时,Java的泛型类也为开发泛型DAO提供了很好的理论基础。在Java Web开发框架(Struts+ Spring+ JPA)中,采用原有的DAO模式已经存在很多漏洞,于是,一种全新泛型DAO模式应运而生。

一、DAO模式

DAO(Data Access Obj 即数据访问对象,是微软第一个面向对象的接口,围绕对象-关系的映射和持久化数据的访问,在业务逻辑层与数据资料库之间,开发人员用DAO模式将底层的数据访问操作和上层的业务逻辑分开,以降低业务层和持久层的接合程度,程序员通过它请求对微软Access数据库的访问。在计算机技术以及Java技术的不断开发过程中,随着系统安全问题隐患的增多、代码的纷繁冗杂、文件数目的庞大等诸多问题的出现,越来越多的程序员迫切需要一种多态性的、面向接口的、安全性更高、代码可读性更强的以及系统更加简化的模式,于是DAO模式应运而生。

二、泛型DAO模式的设计

Java原有的框架(Struts+ Spring+ JPA)中,整个架构的设计过程按照从编程到接口的方法,在表示层、业务逻辑层、数据持久层的每一层中都有与其相应实现的接口,泛型DAO模式链接数据持久层和业务逻辑层,在数据持久层中,为上一层提供接口。

数据持久层使用Hibernate框架实现,其设计使用Facade模式中各个模块的业务入口和Facade接口,并定义其实现类,然后通过接口得到DAO的实现。通过DAO所管理的Domain Object,就能实现对数据库的CRUD(Creations, Reads, Updates  deletions)操作。建立实体的DAO可以通过以泛型的方式学习和使用Entity Hibernate Dao的方法,从而使实体DAO具备CRUD的操作功能。

改进Java原有的DAO模式,就要实现DAO的泛型化,即给出一个抽象的DAO及其实现,而实现的基本内容就是基本的CRUD会话的操作。通常有两种方式,一种是将泛型直接定义在类或接口上;另一种是将泛型定义在方法上。

泛型大大增强了代码的可读性和可复用性,类型的检查在运行阶段之后完成,降低了程序运行时突发异常的发生,明显的提高了运行效率。使用Java泛型DAO所管理的Entity类,默认选择该Entity的CRUD(Creations, Reads, Updates  deletions)方法,就能够达到减少编程错误、提高系统性能。不仅可以清楚地指明Domain Object具有持久性储存的位置,而且也清除了容易出错的类型强制转换需要。

三、泛型DAO的实现

3.1 按主键查询方法的实现

泛型DAO模式是一种在Java EE开发中会被经常用到的模式。在数据持久层中,通常使用普通的DAO模式,每个DAO负责一个主要的对应模块的对象和对象的集合或Entity,由DAO负责Domain Object的CRUD操作。DAO允许除主键外的标准进行查询,其查询的返回值就是该DAO所管理的Domain Object的集合。传统的操作方法是通过Spring框架所提供的Hibernate Dao Support类,直接为所有的持久型对象集合使用CRUD 会话的操作,但是很大地一个缺点就是这样做数据代码无法提供一个高安全的类型接口,从而损失了类型安全。

使用泛型可以很好的解决这个问题,在创建一个Java集合对象时,它能够指出该集合对象可以储存和在取出时各是什么类型的数据,可以避免前后数据对象的不一致,有效的解决了代码中所潜在的关于数据类型转换的安全错误。

3.2 DAO中查询方法的实现

在泛型DAO模式运行的程序中,最难以实现的就是查询,所有的程序开发中都离不开:带分页查询、带排序查询、带条件查询。

(1)带分页的查询,通常需要为Query设置两个参数:第一条记录的位置和最多取出次数的记录。

(2)带排序的查询,使用Linked Hash Map类,然后按用户名降序。

(3)带条件的查询,由于条件会有很多,因此可以使用Map映射结构对各个条件进行储存。由于被查询条件一般会有先后顺序,因此Map中的每一个映射都要按其插入先后顺序存放,在此也使用Linked Hash Map类。

四、整合Struts2、Spring、JPA

用户管理系统的操作对象一般是用户和用户组,主要是对用户实体的CRUD操作,在此以泛型DAO为基础,整合Struts2、Spring和JPA,按照自下向上的顺序,依次为:数据源、实体、DAO/Service和Action。

4.1 数据源

在JPA配置文件中配置持久化单元persistence-unit,在Spring配置文件中配置数据源、实体管理器工厂和事物管理器。

4.2 建立实体User

在数据库中建立一张用户表,编写一个用户实体User,使其属性与数据表中的一一对应,添加setter/getter方法,使用注解配置映射关系。

4.3 业务层编写

业务层是用来处理业务逻辑,通常情况下是调用DAO的方法来实现业务层方法,并且业务层处在DAO之上,大多数情况下使用业务层去继承抽象DAO的方式不见简便而且有效可行。

4.4 Struts2的Action的编写

将User Service注入User Action中,并将User Action添加注解交给Spring管理。

五、对比结果

将泛型DAO模式和普通的DAO模式进行对比:

普通的DAO模式在进行类型文件检查时,需要手动操作,并且存在着很高的安全隐患,代码量比较庞大冗杂。

在整合Struts、Spring、JPA以及泛型DAO模式之后,运行程序的安全性能明显提高,文件数目只有一个,较普通的DAO模式少了很大地部分,而且代码简化。

由此可知,应用泛型DAO模式的Java程序中,能够保证程序的安全性,提高代码的重用性、可读性,从而进一步提高了系统的性能。

总结:

综上所述,原有的DAO模式在Java Web框架中已经存在了很多的不足,而泛型DAO模式的开发,大大弥补了这些不足,通过整合Struts、Spring、JPA以及泛型DAO模式,大大提高了程序的安全性、代码的复用性和可读性、简化了开发,提高了系统的可维护性。因此,在Java Web程序运用中使用泛型DAO模式具有很好的作用,使用泛型DAO模式是应用系统开发的一种理想选择。

你可能感兴趣的:(web开发)