打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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,提供分页函数和若干便捷查询方法,并对返回值作了泛型类型转换。

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
简单SSH项目开发步骤
struts+spring +ibatis
Struts 2与Hibernate整合(入门)
基于全注解方式的SSH基础框架(自认为拿得出手,欢迎拍砖,欢迎继续完善)
请问什么是struts,Spring,Hibernate?
使用spring-mock进行dao集成测试
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服