每日一得

不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速开发
最近关心的内容:SSH,seam,flex,敏捷,TDD
本站的官方站点是:颠覆软件

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  220 随笔 :: 9 文章 :: 421 评论 :: 0 Trackbacks

key word : hibernate,dao

一。简化hibernate
首先hibernate是一个优秀的ORM工具(此话鉴定为废话:))
其次,按照20/80的规律,有80%的问题不需要那20%学习起来比较麻烦的东西。

很多人在用hibernate的时候一定把关系作为精华来学习,比如一对多,多对一,以及多对多,认为只有熟练运用这个才是对hibernate的真正掌握。
说实话,这个想法从技术的角度讲有点道理,问题是很多人对这些始终是一头雾水,反正不要好看,我现在仍然是一头雾水,今天我终于给自己
解放了出来,我回头去看自己的项目,发现N多的时候100%的不要关系(在 hibernate中)也不会出人命,而且效果很好。

现在,每个mapping文件中没有了set,list,map,我相信一定有N多人说我这个不符合OO什么的,不过大家反过来想,在我的项目组中会有一个明显
的好处就是我将问题简化了,
大家都会做,比如Org与User的关系,1:N的关系,我不用考虑这个,直接手工去维护,dao.save(org);user.setOrgId("11");dao.save(user);

有一段时间我依次问各个项目组,你们的hibernate中用到了关联操作了么,回答清一色的“NO”,看来大家都在无意识的回避这个陷阱,呵呵,
很合吾意。

二.简化dao

可能是受到appfuse的影响,一个service就有一个dao,现在从实际的角度来看仍然觉得没有太大的必要,当然,如果你是类似测试驱动的想法
那么可能另当别论。现在我更喜欢一个通用的dao全部搞定,确实舒服。

service中的操作全部调用通用dao(getObjects(),saveObject(),updateObject(),removeObject())

public BeanValue saveItem(RequestMap rMap) {
        BeanValue value 
= null;
        
try {
            log.info(
"=====begin to save alexItem object");
            value 
= new BeanValue();
            AlexItem alexItem 
= (AlexItem) BeanUtil.convertObject(AlexItem.class, rMap.getMap());
            dao.saveObject(alexItem);
            log.info(
"=====end to save alexItem object");
            value.addRequestMap(
"admin",alexItem);
            value.setForword(
"success");
        }
 catch (BaseException e) {
           value.addErrorMap(
"errorName",e);
           value.setForword(
"error");
        }

        
return value;
    }

 


愿意听听各位在项目中的做法。

posted on 2007-05-13 16:41 Alex 阅读(5617) 评论(13)  编辑  收藏 所属分类: javaHibernate

评论

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 17:25 快译站
是的,写代码要胆大心细,敢于创新,呵呵,顶一个

www.doodle8.cn 涂鸦基地,跟踪最新的 web2.0 资源  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 18:53 鱼肠剑
这个不好吧.维护时是不出人命.但会要人命啊.现在的工具都很智能了.也不用人为的去维护这个关联.把数据设计好.用工具直接生成代码.而且在用这个类的时候也是比不用这些关联要方便.  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 20:16 阿欢
我刚从学校毕业到一家公司,公司就是这么做的,我并不习惯,认为把关系建好,一切都让工具自动生成不是更好,而且维护起来一目了然,做删除操作的时候,需要动哪几个表也会很清楚,而现在根本就看不出来关系,特别是在数据库复杂的时候。而我提出自己的想法时,他们总会说实践证明他们的选择是明智的,利大于弊,而我的意见只能成为保留意见了。  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 20:23 errorufn
一直都在用通用的DAO啊,没有什么实现的问题  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 21:40 雨奏
@Alex
请问你的通用DAO是怎么写的呢?
Hibernate提出了一种泛型DAO的写法,参见http://www.hibernate.org/328.html  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 22:30 Alex
to 阿欢:
事实上正是如此,不用关系看起来比较丑陋,也不怎么有效率,但是好处就是不会有什么问题,也就是比较简单。但是用关系问题可能会出现,当然肯定和用的人的掌握的水准有关系,我经历过的几个比较大的项目都有这样的问题,最后都老老实实的用最简单但是安全的方式来作。

我相信hibernate是个好东西,但是还是有点难度和学习曲线的,特别是在项目中我们要综合考虑。

  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 22:41 Alex
to 雨奏 :
范型是个好东西,不过不怕你笑话,作了这么多项目还没有用过一次范型,其实那个东西我个人觉得也没有什么特别有用的地方 ,对于我们的项目来说很实际,jdk只支持1.3,所以还是保守点吧,我个人的观点是用最简单的方式解决最通用的问题。题外话,大家注意到没有,比较大的一些软件公司他们的技术选型都偏保守,你看oracle的产品所使用的jdk版本,比一般的慢多了,现在1.3的还在大量使用,更别提1.5的了 。  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-13 22:43 Alex
to 鱼肠剑
用了关系可能会出现性能的问题,但是不用关系基本不会出现性能的问题,这个观点你觉得有可能么 ?呵呵  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-14 16:18 lizongbo
从来不用关系.

比如要把 Threads表切成 Threads200703, Threads200704这样的日志多表的时候,就体会到表没有关联的好处了.

 

  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao[未登录] 2007-05-14 17:43 errorfun
我就是用范型实现的啊,在05年时做的一个项目时就用上了,当时JDK1.5好像才刚出没多久。一直没发现什么问题  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-05-23 09:45 我心依旧
恩,如果公司没有硬性的要求.我也跟你的想法一样.能简化的当然简化.  回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2007-09-28 01:35 Danny Teng
Hibernate is ORM which means that Object-relationship mapping. so two parts should be the core of hibernate.
1. Object. whatever you use DAO or not.
2. relationship. the relationship between DB structure and objects,

I don't think yours is smart and simple.   回复  更多评论
  

# re: 简单就是美 -- 简化hibernate,简化dao 2008-07-03 07:23 faust
不用DAO,弱化DAO层的存在,个人觉得是有道理的

在J2EE 5.0中,EM的存在本身也直接弱化了DAO,从侧面证明DAO可以弱化

对于开发来说,维护Service和Action是直接面向业务的,DAO的存在,更多是面向技术和开发重用,现在的情况看来,在DAO层进行深入分析设计,合理构架的很少,必要性也相对较小,所以,考虑还是使用通用DAO的思路

关于关系的使用,在Hibernate里面是否应该重点使用各种关系,对于较大型的项目,参与人水平良莠不齐时,使用关系风险很高,不如直接使用HQL形成逻辑上的联系,手工保障其同步,更容易接收和实现


由于考虑向下兼容,个人倾向于整体保障JDK1.4,重点保障1.3,这样框架的适应力更强

  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: