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