如鵬網(wǎng) 大學(xué)生計(jì)算機(jī)學(xué)習(xí)社區(qū)

          CowNew開(kāi)源團(tuán)隊(duì)

          http://www.cownew.com 郵件請(qǐng)聯(lián)系 about521 at 163.com

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

          CowNew開(kāi)源團(tuán)隊(duì)網(wǎng)站 http://www.cownew.com
          論壇??? http://www.cownew.com/newpeng/
          轉(zhuǎn)載請(qǐng)注明此版權(quán)信息。

          ORM在整個(gè)java社區(qū)使用越來(lái)越廣泛,但是隨著更多的項(xiàng)目使用ORM,很多人也感到了它的不足:慢,甚至慢的讓人無(wú)法忍受!可是讓我們從ORM的原理仔細(xì)思考一下,就會(huì)發(fā)現(xiàn),使用ORM并不會(huì)明顯降低運(yùn)行速度。因?yàn)闊o(wú)論什么ORM工具都是根據(jù)對(duì)象去動(dòng)態(tài)構(gòu)造SQL語(yǔ)句,執(zhí)行的,相信無(wú)論構(gòu)造SQL的速度多么慢,那和數(shù)據(jù)庫(kù)操作比起來(lái),幾乎是可以忽略不計(jì)的。但是為什么確實(shí)又那么慢呢?歸根結(jié)底,是對(duì)ORM的使用不當(dāng)造成的。
          1、陋習(xí):過(guò)渡依賴ORM的Update和delete。比如,將某個(gè)人的年齡加3,很多人就會(huì)如下寫:
          PersonInfo p = orm.getPerson(...);
          p.setAge(p.getAge);
          orm.update(p);
          看看,這一來(lái)一回就要兩個(gè)sql語(yǔ)句,先取數(shù)據(jù):select age,id,.... from T_Person,然后再update,update T_Person set age=23....。
          相信沒(méi)有ORM,誰(shuí)也不會(huì)去這么寫。直接寫sql:update T_Person set age=age+3 where...這不很好嗎?速度不會(huì)快多了嗎?
          又如:刪除年齡為15的人,有的人就敢這么寫:
          PersonInfo persons[] = orm.getPersons("age=15");
          for(int i=0,n=persons.length;i<n;i++)
          {
          ?? orm.delete(persons[i]);
          }

          我真的要瘋了,它真的不懂delete from T_person where age=15嗎??
          根據(jù)我個(gè)人的經(jīng)驗(yàn)如果要發(fā)揮ORM的最大作用,同時(shí)最大程度的避免其副作用,我建議最好只使用orm的addNew(增加數(shù)據(jù))和get***Info(從數(shù)據(jù)庫(kù)中取數(shù)據(jù))的功能,而對(duì)update,delete則直接寫sql,這樣最好。
          ORM+JDBC,優(yōu)美和效率的最佳結(jié)合點(diǎn)。
          2、認(rèn)為ORM萬(wàn)能。在寫一些報(bào)表的時(shí)候甚至也有人用orm取出數(shù)據(jù),然后通過(guò)代碼來(lái)出報(bào)表。相信稍微復(fù)雜一點(diǎn)的報(bào)表就能把人搞死。所以報(bào)表,千萬(wàn)不能用ORM,直接寫SQL是最好的事情。

          posted on 2006-06-09 01:33 CowNew開(kāi)源團(tuán)隊(duì) 閱讀(854) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 永寿县| 襄汾县| 武穴市| 固安县| 河池市| 台湾省| 合山市| 岑巩县| 西丰县| 泾阳县| 左贡县| 措勤县| 蓬溪县| 英吉沙县| 宾川县| 奉节县| 景德镇市| 衡水市| 安多县| 岳阳县| 双城市| 美姑县| 鱼台县| 康保县| 澄迈县| 珲春市| 巴马| 洛阳市| 拉孜县| 长岛县| 康定县| 秀山| 额济纳旗| 沧源| 德令哈市| 调兵山市| 福清市| 安仁县| 河源市| 区。| 大宁县|