struts2+hibernate+spring配置管理(二)——DAO层(一)

前面时间一直忙于赶项目,忽略了Struts2+hibernate+spring这个系列只是开了个头,所以赶紧把以前的代码翻出来,整理了一下,就接着讲DAO层吧。

首先我们一起讨论一下DAO层的设计,一般来说,有这样两种设计:

java 代码
  1. public class ADAO(){   
  2.     public void create(A a){   
  3.        ....   
  4.     }   
  5.   
  6.     public void add(A a){   
  7.        ....   
  8.     }   
  9.   
  10.     public void delete(A a){   
  11.        ....   
  12.     }   
  13. }   
  14.   
  15. public class BDAO(){   
  16.     public void create(B b){   
  17.        ....   
  18.     }   
  19.   
  20.     public void add(B b){   
  21.        ....   
  22.     }   
  23.   
  24.     public void delete(B b){   
  25.        ....   
  26.     }   
  27.   
  28.     public void find(B b){   
  29.        ....   
  30.     }   
  31. }   
  32.   
  33. public class CDAO(C c){   
  34.     public void create(){   
  35.        ....   
  36.     }   
  37.   
  38.     public void add(C c){   
  39.        ....   
  40.     }   
  41.   
  42.     public void delete(C c){   
  43.        ....   
  44.     }   
  45.   
  46.     public void find(C c){   
  47.        ....   
  48.     }   
  49. }  

这里一共设计了三个实体DAO,分别为A,B,C,这样的好处是对象的封装思想比较好,每个实体DAO都有自己独立的接口方法,但缺点也显而易见,就是重复代码太多太多。

再看第二种设计思想,以解决前面的缺点:

java 代码
  1. abstract public class BaseDAO{   
  2.     public void create(Object o){      
  3.        ....      
  4.     }      
  5.      
  6.     public void add(Object o){      
  7.        ....      
  8.     }      
  9.      
  10.     public void delete(Object o){      
  11.        ....      
  12.     }   
  13.      
  14.   
  15. }   
  16.   
  17. public class ADAO entends BaseDAO{   
  18.     public void otherMethod(A a){   
  19.         .....   
  20.     }   
  21. }   
  22.   
  23. //other EntityDAO   
  24. .....   

使用这种设计思想,很好的解决了前面的瓶颈,但它也有缺点,破坏了面向对象的封装性。

两个设计思想,我们该如何取舍呢?其实如果了解泛型的话,就迎刃而解了,于是,就有了第三种解决方案如下:

java 代码
  1. abstract public class DAO  {      
  2.     public void create (T t)){
  3.        ...
  4.     }    
  5.       
  6.     public void delete (T t)){
  7.        ...
  8.     }    
  9.       
  10.     public void update (T t)){
  11.        ...
  12.     }    
  13.       
  14.     ...   
  15. }      
  16.      
  17. public class ADAO extends BaseDAO {      
  18.     public void otherMethod (A a){
  19.        ...
  20.     }    
  21. }   

注:关于泛型的知识,不是本文所要讲的,如有不解,可查找有关文档寻求帮助。

应该说,我个人比较喜欢第三种解决方案,由于这个项目使用了spring,于是大家应该又能想到让它继承于Spring的HibernateDaoSupport,提供分页函数和若干便捷查询方法,并对返回值作了泛型类型转换。

经过讨论后,大家应该有了比较好的思路了,具体代码碍于篇幅,下一篇贴出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值