数据库访问层中使用GenericDao和HibernateDaoSupport

1.参考文献

  1).SSH实例:基于HibernateDaoSupport的泛型Dao

  2).GenericDao设计模式

  3).Generic Data Access Objects

open source project:

  4).genericdao

  5).hibernate-generic-dao

2.问题

  含有多个pojo实体,每一个pojo都要写一个PojoDAO,非常乏味枯燥,思考有没有一种通过的DAO能够省去为每一个pojo写一个DAO。

3.GenericDao分析

  GenericDao的目的是通过他来实现通用的数据库访问层,它通过泛型来实现不同pojo也能够使用一个GenericDao来进行访问,只需要设置泛型的类型即可。首先来看一看GenericDao整体结构。

数据库访问层中使用GenericDao和HibernateDaoSupport

图1:GenericDao结构图

ps:2011-12-28

  今天给eclipse安装了GreenUML这个eclipse插件,在eclipse中通过如下网址:http://www.cse.buffalo.edu/faculty/alphonce/green更新插件即可。GreenUML能够根据代码生成UML图,所以我将GenericDao结构生成UML如下:

数据库访问层中使用GenericDao和HibernateDaoSupport

下面来解释上面每一个类或者接口的用户

  1. GenericDao<T>:泛型接口,在这里定义了Dao层的基础的CRUD(Create, read, update and delete)方法,比如sava保存实例,delete删除实例等等。
  2. HibernateDaoSupport:这个是由spring提供的一个抽象类:org.springframework.orm.hibernate3.support.HibernateDaoSupport。类里面定义了 HibernateTemplate的实例,是hibernate的ORM结构中最基础的一个类。
  3. HibernateGenericDao:这个类在我们的例子中没有定义任何方法与变量,他的主要的用处是:(1)重写(Override)HibernateDaoSupport 中定义的方法;(2)增加一些对HibernateDaoSupport类的补充。
  4. GenericDaoImplHibernate<T>:这个类继承HibernateGenericDao并实现接口GenericDao<T>
  5. FileDao:数据访问层接口,根据需求定义方法。
  6. FileDaoImpl:实例化的数据库访问层接口FileDao,并继承通用数据库访问层的类。这样如果FileDao中没有定义方法,那么就表明通用数据库访问层GenericDaoImplHibernate已经能够满足需要。

  上面的结构图看上去有点负责,其实是因为这样的接口充分考虑了系统的可扩充性。如果不考虑可扩充性的话,那么像FileDao、FileDaoImpl和HibernateGenericDao都可以去掉,直接让GenericDaoImplHibernate<T>实现GenericDao<T>接口并继承HibernateDaoSupport类就可以了。在后在使用的时候实例化Dao对象,比如:

GenericDaoImplHibernate<User> userDao=new GenericDaoImplHibernate<User>()

4.GenericDao代码实例

根据GenericDao结构图给出各个接口与类的代码。

4.1.GenericDao.java

数据库访问层中使用GenericDao和HibernateDaoSupportView Code

4.2.HibernateDaoSupport.java

这个其实只需要导入spring.jar包即可,不过这里我还是贴出它的源代码,以供参考

数据库访问层中使用GenericDao和HibernateDaoSupportView Code

4.3.HibernateGenericDao.java

数据库访问层中使用GenericDao和HibernateDaoSupportView Code

4.4.GenericDaoImplHibernate

数据库访问层中使用GenericDao和HibernateDaoSupportView Code

4.5.UserDao

数据库访问层中使用GenericDao和HibernateDaoSupportView Code

4.6.UserDaoImpl

数据库访问层中使用GenericDao和HibernateDaoSupportView Code

 

本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/12/25/2300986.html,如需转载请自行联系原作者