为什么Hibernate如此成功!
Hibernate实际上总是向数据库发送PreparedStatement,已经在很大程度上避免了程序员对于Statement的误用。但是即使是PreparedStatement,不用Placehold,非要把常量带入,也会出现同样的性能问题。
当where子句的条件不确定的时候,使用PreparedStatement是非常痛苦的,因为Statment可以简单的用常量代入的方式动态构造sql,而PreparedStatement的的set参数的方法是按照数字索引的,比如:
setString(1,...);
setBoolean(2,...);
就造成了动态构造的sql,你无法确定参数的1,2这样的数字顺序,除非使用很大很麻烦的if else嵌套才能够勉强解决。
但是Hibernate好在可以使用带名的Placehold,就是这样:
select * from table where user = :name
然后set参数的时候,就可以setString("name",...);
由于set参数和顺序无关,就很容易实现动态构造sql。
这也是Hibernate的一个很大的优点。
####
作者:bruce
来源:http://www.hibernate.org.cn/viewtopic.php?t=49
这应该是Hibernate好处的其中之一吧!
当where子句的条件不确定的时候,使用PreparedStatement是非常痛苦的,因为Statment可以简单的用常量代入的方式动态构造sql,而PreparedStatement的的set参数的方法是按照数字索引的,比如:
setString(1,...);
setBoolean(2,...);
就造成了动态构造的sql,你无法确定参数的1,2这样的数字顺序,除非使用很大很麻烦的if else嵌套才能够勉强解决。
但是Hibernate好在可以使用带名的Placehold,就是这样:
select * from table where user = :name
然后set参数的时候,就可以setString("name",...);
由于set参数和顺序无关,就很容易实现动态构造sql。
这也是Hibernate的一个很大的优点。
####
作者:bruce
来源:http://www.hibernate.org.cn/viewtopic.php?t=49
这应该是Hibernate好处的其中之一吧!
meiking
2005-03-15 17:56:06
评论:0
阅读:990
引用:0
