我认为存储过程的主要好处就是性能好一些,但是,对J2EE“许多”应用来讲,用存储过程的应用不一定就性能好,比如:
1)用存储过程,可能使中间层的缓存优势没有了(如果对业务逻辑的结果或者在界面层缓存,空间效率可能会非常低,而且很多情况根本就不能缓存,比如里面包含了权限)。数据库虽然可以缓存,但是访问存储过程必须通过JDBC驱动,socket连接,数据库的XX操作等等,就消耗了大量时间,prevayler的内存查询比mysql通过JDBC快3000倍(mysql缓存所有数据在内存),当然存储过程可能好一点点。
2)多数企业应用强调的性能,我的理解,不是单个响应性能,而是伸缩。而J2EE应用伸缩性的瓶颈很多都是在数据库和JDBC驱动,如果把逻辑执行也放入数据库中,又没有中间件缓存,加重了数据库服务器的负荷,而且JDBC调用次数会增加,高负荷性能会大大下降。而如果你的逻辑在中间层,中间层使很容易伸缩的,比如缓存,集群的技术都很成熟。
除了性能之外,存储过程恐怕没什么优势可言。
我觉得存储过程和其他东西完全也同时存在,就像CMP,Hibernate可以和JDBC同时使用一样,对必要的地方进行优化。