hibernate预编译SQL语句中的setParameter和setParameterList
来源:互联网 发布:常用的数据库有哪些 编辑:程序博客网 时间:2024/06/08 14:54
转自:http://blog.csdn.net/aitangyong/article/details/38751363
在hql语句中,要是传递的参数是个字符串数组,这时候占位符就显得很笨了,需要使用setParameterList这样的形式,就可以很好地解决:
hibernate预编译SQL语句中的setParameter和setParameterList
使用预编译SQL语句和占位符参数(在jdbc中是?),能够避免因为使用字符串拼接sql语句带来的复杂性。我们先来简单的看下,使用预编译SQL语句的好处。 使用String sql = "select * from Student where name=" + name;如果name的值是1或 "aty"或"aty'aty",就会产生下面错误的sql
--ORA-01722 invalid numberselect * from student where name=1;--ORA-00904 invalid identifierselect * from student where name=aty;--ORA-01756: quoted string not properly terminatedselect * from student where name=aty'aty;
在构造sql的时候,使如果用了字符串拼接,就必须考虑数据类型,是否需要加单引号等细节问题,稍微不注意,就会导致错误sql语句。当拼接字符串很多的时候,代码几乎不可读,定位问题也十分困难。这是预编译sql在代码可读性和简单性上的优势。还有就是性能上的优势,可以参考我的另一篇博文: HQL或SQL使用?带来的好处:减少SQL解析时间、降低内存开销、防止SQL注入 。
JDBC提供PreparedStatement.setXXX()来替换占位参数,hibernate对应的是setParameter和setParameterList。
setParameter 和 setParameterList 的区别在于,使用in的时候。
Object[] params = new Integer[]{1, 2};String hqlF = "from Student where id in (?,?)";Query query = session.createQuery(hqlF);for (int i = 0; i < params.length; i++){query.setParameter(i, params[i]);}//String hqlS = "from Student where id in :valueList";String hqlS = "from Student where id in (:valueList)";Query queryS = session.createQuery(hqlS); queryS.setParameterList("valueList", params);
很显然,使用setParameterList代码更简单。这里也赞美下hibernate的API设计,既提供了常规繁琐的做法setParameter,也提供了简洁易用的setParameterList。这种一致性,对于熟悉和不熟悉hibernate的人来说,提供了更多的选择。
0 0
- hibernate预编译SQL语句中的setParameter和setParameterList
- hibernate预编译SQL语句中的setParameter和setParameterList
- hibernate -- 分页模糊查询中setParameter 和setParameterList
- hibernate -- 分页模糊查询中setParameter 和setParameterList
- setParameter和setParameterList的区别
- 分页模糊查询中setParameter 和setParameterList
- SQL语句预编译
- SQL语句的预编译
- 使用预编译SQL语句
- JDBC中的预编译语句
- JDBC中的预编译语句
- mysql中的预编译语句
- Oracle预编译的SQL语句处理
- Java数据库连接 - 预编译SQL语句
- JDBC:PreparedStatement预编译执行SQL语句
- sql预编译和注入
- 后台用setParameter()函数为sql语句添加参数
- hibernate 3.2.3 setParameterList bug
- k-d树与特征匹配
- 在下刚来到csdn 看到大神很多的啊
- 优雅整合SSM框架
- JS得到div的value值(网上资料保存)
- jsp:使用include乱码
- hibernate预编译SQL语句中的setParameter和setParameterList
- 堆排序/heapSort
- java中的方法覆盖(overriding)和方法重载(overloading)
- 2.27~3.3 日常(树状数组&差分)
- git使用
- RxJava入门篇 --(一) 响应式编程
- Andriod内存泄露之WebView
- Android编译系统简要介绍和学习计划
- 触发器