每日一得

          不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速開發(fā)
          最近關(guān)心的內(nèi)容:SSH,seam,flex,敏捷,TDD
          本站的官方站點(diǎn)是:顛覆軟件

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            220 隨筆 :: 9 文章 :: 421 評(píng)論 :: 0 Trackbacks

          key word : hibernate,dao

          一。簡(jiǎn)化hibernate
          首先hibernate是一個(gè)優(yōu)秀的ORM工具(此話鑒定為廢話:))
          其次,按照20/80的規(guī)律,有80%的問(wèn)題不需要那20%學(xué)習(xí)起來(lái)比較麻煩的東西。

          很多人在用hibernate的時(shí)候一定把關(guān)系作為精華來(lái)學(xué)習(xí),比如一對(duì)多,多對(duì)一,以及多對(duì)多,認(rèn)為只有熟練運(yùn)用這個(gè)才是對(duì)hibernate的真正掌握。
          說(shuō)實(shí)話,這個(gè)想法從技術(shù)的角度講有點(diǎn)道理,問(wèn)題是很多人對(duì)這些始終是一頭霧水,反正不要好看,我現(xiàn)在仍然是一頭霧水,今天我終于給自己
          解放了出來(lái),我回頭去看自己的項(xiàng)目,發(fā)現(xiàn)N多的時(shí)候100%的不要關(guān)系(在 hibernate中)也不會(huì)出人命,而且效果很好。

          現(xiàn)在,每個(gè)mapping文件中沒有了set,list,map,我相信一定有N多人說(shuō)我這個(gè)不符合OO什么的,不過(guò)大家反過(guò)來(lái)想,在我的項(xiàng)目組中會(huì)有一個(gè)明顯
          的好處就是我將問(wèn)題簡(jiǎn)化了,
          大家都會(huì)做,比如Org與User的關(guān)系,1:N的關(guān)系,我不用考慮這個(gè),直接手工去維護(hù),dao.save(org);user.setOrgId("11");dao.save(user);

          有一段時(shí)間我依次問(wèn)各個(gè)項(xiàng)目組,你們的hibernate中用到了關(guān)聯(lián)操作了么,回答清一色的“NO”,看來(lái)大家都在無(wú)意識(shí)的回避這個(gè)陷阱,呵呵,
          很合吾意。

          二.簡(jiǎn)化dao

          可能是受到appfuse的影響,一個(gè)service就有一個(gè)dao,現(xiàn)在從實(shí)際的角度來(lái)看仍然覺得沒有太大的必要,當(dāng)然,如果你是類似測(cè)試驅(qū)動(dòng)的想法
          那么可能另當(dāng)別論。現(xiàn)在我更喜歡一個(gè)通用的dao全部搞定,確實(shí)舒服。

          service中的操作全部調(diào)用通用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;
              }

           


          愿意聽聽各位在項(xiàng)目中的做法。

          posted on 2007-05-13 16:41 Alex 閱讀(5686) 評(píng)論(13)  編輯  收藏 所屬分類: javaHibernate

          評(píng)論

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 17:25 快譯站
          是的,寫代碼要膽大心細(xì),敢于創(chuàng)新,呵呵,頂一個(gè)

          www.doodle8.cn 涂鴉基地,跟蹤最新的 web2.0 資源  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 18:53 魚腸劍
          這個(gè)不好吧.維護(hù)時(shí)是不出人命.但會(huì)要人命啊.現(xiàn)在的工具都很智能了.也不用人為的去維護(hù)這個(gè)關(guān)聯(lián).把數(shù)據(jù)設(shè)計(jì)好.用工具直接生成代碼.而且在用這個(gè)類的時(shí)候也是比不用這些關(guān)聯(lián)要方便.  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 20:16 阿歡
          我剛從學(xué)校畢業(yè)到一家公司,公司就是這么做的,我并不習(xí)慣,認(rèn)為把關(guān)系建好,一切都讓工具自動(dòng)生成不是更好,而且維護(hù)起來(lái)一目了然,做刪除操作的時(shí)候,需要?jiǎng)幽膸讉€(gè)表也會(huì)很清楚,而現(xiàn)在根本就看不出來(lái)關(guān)系,特別是在數(shù)據(jù)庫(kù)復(fù)雜的時(shí)候。而我提出自己的想法時(shí),他們總會(huì)說(shuō)實(shí)踐證明他們的選擇是明智的,利大于弊,而我的意見只能成為保留意見了。  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 20:23 errorufn
          一直都在用通用的DAO啊,沒有什么實(shí)現(xiàn)的問(wèn)題  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 21:40 雨奏
          @Alex
          請(qǐng)問(wèn)你的通用DAO是怎么寫的呢?
          Hibernate提出了一種泛型DAO的寫法,參見http://www.hibernate.org/328.html  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 22:30 Alex
          to 阿歡:
          事實(shí)上正是如此,不用關(guān)系看起來(lái)比較丑陋,也不怎么有效率,但是好處就是不會(huì)有什么問(wèn)題,也就是比較簡(jiǎn)單。但是用關(guān)系問(wèn)題可能會(huì)出現(xiàn),當(dāng)然肯定和用的人的掌握的水準(zhǔn)有關(guān)系,我經(jīng)歷過(guò)的幾個(gè)比較大的項(xiàng)目都有這樣的問(wèn)題,最后都老老實(shí)實(shí)的用最簡(jiǎn)單但是安全的方式來(lái)作。

          我相信hibernate是個(gè)好東西,但是還是有點(diǎn)難度和學(xué)習(xí)曲線的,特別是在項(xiàng)目中我們要綜合考慮。

            回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 22:41 Alex
          to 雨奏 :
          范型是個(gè)好東西,不過(guò)不怕你笑話,作了這么多項(xiàng)目還沒有用過(guò)一次范型,其實(shí)那個(gè)東西我個(gè)人覺得也沒有什么特別有用的地方 ,對(duì)于我們的項(xiàng)目來(lái)說(shuō)很實(shí)際,jdk只支持1.3,所以還是保守點(diǎn)吧,我個(gè)人的觀點(diǎn)是用最簡(jiǎn)單的方式解決最通用的問(wèn)題。題外話,大家注意到?jīng)]有,比較大的一些軟件公司他們的技術(shù)選型都偏保守,你看oracle的產(chǎn)品所使用的jdk版本,比一般的慢多了,現(xiàn)在1.3的還在大量使用,更別提1.5的了 。  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-13 22:43 Alex
          to 魚腸劍
          用了關(guān)系可能會(huì)出現(xiàn)性能的問(wèn)題,但是不用關(guān)系基本不會(huì)出現(xiàn)性能的問(wèn)題,這個(gè)觀點(diǎn)你覺得有可能么 ?呵呵  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-14 16:18 lizongbo
          從來(lái)不用關(guān)系.

          比如要把 Threads表切成 Threads200703, Threads200704這樣的日志多表的時(shí)候,就體會(huì)到表沒有關(guān)聯(lián)的好處了.

           

            回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao[未登錄] 2007-05-14 17:43 errorfun
          我就是用范型實(shí)現(xiàn)的啊,在05年時(shí)做的一個(gè)項(xiàng)目時(shí)就用上了,當(dāng)時(shí)JDK1.5好像才剛出沒多久。一直沒發(fā)現(xiàn)什么問(wèn)題  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2007-05-23 09:45 我心依舊
          恩,如果公司沒有硬性的要求.我也跟你的想法一樣.能簡(jiǎn)化的當(dāng)然簡(jiǎn)化.  回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化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.   回復(fù)  更多評(píng)論
            

          # re: 簡(jiǎn)單就是美 -- 簡(jiǎn)化hibernate,簡(jiǎn)化dao 2008-07-03 07:23 faust
          不用DAO,弱化DAO層的存在,個(gè)人覺得是有道理的

          在J2EE 5.0中,EM的存在本身也直接弱化了DAO,從側(cè)面證明DAO可以弱化

          對(duì)于開發(fā)來(lái)說(shuō),維護(hù)Service和Action是直接面向業(yè)務(wù)的,DAO的存在,更多是面向技術(shù)和開發(fā)重用,現(xiàn)在的情況看來(lái),在DAO層進(jìn)行深入分析設(shè)計(jì),合理構(gòu)架的很少,必要性也相對(duì)較小,所以,考慮還是使用通用DAO的思路

          關(guān)于關(guān)系的使用,在Hibernate里面是否應(yīng)該重點(diǎn)使用各種關(guān)系,對(duì)于較大型的項(xiàng)目,參與人水平良莠不齊時(shí),使用關(guān)系風(fēng)險(xiǎn)很高,不如直接使用HQL形成邏輯上的聯(lián)系,手工保障其同步,更容易接收和實(shí)現(xiàn)


          由于考慮向下兼容,個(gè)人傾向于整體保障JDK1.4,重點(diǎn)保障1.3,這樣框架的適應(yīng)力更強(qiáng)

            回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 辽阳市| 乐亭县| 南华县| 山丹县| 康保县| 古丈县| 双柏县| 凉城县| 景德镇市| 和政县| 肥城市| 禹州市| 仁寿县| 蒲江县| 黄石市| 松江区| 汪清县| 通道| 轮台县| 潼关县| 泌阳县| 太谷县| 靖远县| 增城市| 洪泽县| 绿春县| 淮阳县| 连南| 同江市| 绵阳市| 固阳县| 甘洛县| 时尚| 夏津县| 揭阳市| 阿图什市| 浦城县| 福安市| 崇左市| 韶关市| 青海省|