CowNew開源團隊網站 http://www.cownew.com
論壇??? http://www.cownew.com/newpeng/
轉載請注明此版權信息。
ORM在整個java社區使用越來越廣泛,但是隨著更多的項目使用ORM,很多人也感到了它的不足:慢,甚至慢的讓人無法忍受!可是讓我們從ORM的原理仔細思考一下,就會發現,使用ORM并不會明顯降低運行速度。因為無論什么ORM工具都是根據對象去動態構造SQL語句,執行的,相信無論構造SQL的速度多么慢,那和數據庫操作比起來,幾乎是可以忽略不計的。但是為什么確實又那么慢呢?歸根結底,是對ORM的使用不當造成的。
1、陋習:過渡依賴ORM的Update和delete。比如,將某個人的年齡加3,很多人就會如下寫:
PersonInfo p = orm.getPerson(...);
p.setAge(p.getAge);
orm.update(p);
看看,這一來一回就要兩個sql語句,先取數據:select age,id,.... from T_Person,然后再update,update T_Person set age=23....。
相信沒有ORM,誰也不會去這么寫。直接寫sql:update T_Person set age=age+3 where...這不很好嗎?速度不會快多了嗎?
又如:刪除年齡為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嗎??
根據我個人的經驗如果要發揮ORM的最大作用,同時最大程度的避免其副作用,我建議最好只使用orm的addNew(增加數據)和get***Info(從數據庫中取數據)的功能,而對update,delete則直接寫sql,這樣最好。
ORM+JDBC,優美和效率的最佳結合點。
2、認為ORM萬能。在寫一些報表的時候甚至也有人用orm取出數據,然后通過代碼來出報表。相信稍微復雜一點的報表就能把人搞死。所以報表,千萬不能用ORM,直接寫SQL是最好的事情。