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是最好的事情。