来源于:https://my.oschina.net/u/1754093/blog/707083

1、按参数名称绑定

在HQL语句中定义命名参数要用”:”开头,形式如下:

Query query=session.createQuery(“from User user where user.name=:customername and user:customerage=:age ”);
query.setString(“customername”,name);
query.setInteger(“customerage”,age); 

上 面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用 Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。

2、 按参数位置邦定

在HQL查询语句中用”?”来定义参数位置,形式如下:

Query query=session.createQuery(“from User user where user.name=? and user.age =? ”);
query.setString(0,name);
query.setInteger(1,age); 

同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表绑定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。

注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。

3、setParameter()方法

在Hibernate的HQL查询中可以通过setParameter()方法绑定任意类型的参数,如下代码:

String hql=”from User user where user.name=:customername ”;
Query query=session.createQuery(hql);
query.setParameter(“customername”,name,Hibernate.STRING);

如上面代码所示,setParameter()方法包含三个参数,分别是命名参数名称,命名参数实际值,以及命名参数映射类型。对于某些参数类型 setParameter()方法可以更具参数值的Java类型,猜测出对应的映射类型,因此这时不需要显示写出映射类型,像上面的例子,可以直接这样 写: 
query.setParameter(“customername”,name);但是对于一些类型就必须写明映射类型,比如 java.util.Date类型,因为它会对应Hibernate的多种映射类型,比如Hibernate.DATA或者 Hibernate.TIMESTAMP。

4、setProperties()方法

在Hibernate中可以使用setProperties()方法,将命名参数与一个对象的属性值绑定在一起,如下程序代码:

Customer customer=new Customer();
customer.setName(“pansl”);
customer.setAge(80);
Query query=session.createQuery(“from Customer c where c.name=:name and c.age=:age ”);  query.setProperties(customer); 

setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名。 
这里还有一个特殊的setEntity()方法,它会把命名参数与一个持久化对象相关联,如下面代码所示:

Customer customer=(Customer)session.load(Customer.class,”1”);
Query query=session.createQuery(“from Order order where order.customer=:customer ”);
query. setEntity(“customer”,customer);
List list=query.list(); 

hibernate防止sql注入对参数赋值传参数的例子相关推荐

  1. 强大的PHP防SQL注入类,可以过滤敏感参数

    这是一个考虑比较全面的php和sql结合的防注入程序,在php方便主要对get,post,cooke,files进行了过滤,在sql中我们就对delete,update一些查询命令进行检测过滤. SQ ...

  2. 本地搭建靶站进行漏洞复现和防御(SQL注入、文件上传、XSS漏洞的多种形式)

    目录 注册登录模块 源码 测试 源码加固 文件上传模块 源码 测试 源码加固 发布动态模块 源码 测试 源码加固 本地搭建靶站进行测试,旨在提高自己的开发能力以及对漏洞的理解. 源码:利用PHP开发具 ...

  3. CTF学习(二)——信息泄露、密码口令、SQL注入、文件上传

    一.信息泄露 1.1目录遍历 ①点开题目后依次点开各目录,遍历后发现flag文件得旗 1.2 PHPINFO ①在长篇文件中查找flag得旗 1.3备份文件下载 1.3.1 网站源码 ①由提示下载文件 ...

  4. [ctf web]基于多线程的sql注入的fuzz测试过滤参数模板

    import requests import threading import math def burp(threads,url): #把测试sql关键字传入text列表with open(r&qu ...

  5. c语言的指针和java引用传递参数,java传参数是传值还是引用

    1.基参数是本数据类型 传递是值(或者说值得副本). 2.参数是对象的话传递的是对象引用的副本.(1.修改引用副本指向新对象不会影响原来对象,2.修改引用指向的对象的属性会修改成功,3.如果传递时st ...

  6. mybatis中如何防止sql注入和传参

    环境 使用mysql,数据库名为test,含有1表名为users,users内数据如下 JDBC下的SQL注入 在JDBC下有两种方法执行SQL语句,分别是Statement和PrepareState ...

  7. 防止sql拼接的Java方法,java程序防止sql注入的方法

    12306刚爆出sql注入的漏洞(http://hyfw.12306.cn/hyinfo/action/ClcscxAction_index?cllx=G这个页面,自重输入1'),之前一些关于sql注 ...

  8. DataWorks功能实践速览 — 参数透传

    简介: DataWorks功能实践系列,帮助您解析业务实现过程中的痛点,提高业务功能使用效率! 往期回顾: DataWorks 功能实践速览01期--数据同步解决方案:为您介绍不同场景下可选的数据同步 ...

  9. java 最新sql注入原因以及预防方案(易理解)

    前沿 在现有的框架中sql防注入已经做得很好了,我们需要做的就是尽量不要使用sql拼接调用 java sql注入原因以及预防方案(易理解) 1. SQL注入 1.1 原理 SQL注入是通过客户端的输入 ...

最新文章

  1. 4.1 df命令 4.2 du命令 4.3/4.4 磁盘分区
  2. python done()什么意思_Python done
  3. Ubuntu下打开rar乱码问题的解决方法
  4. numpy---one
  5. 牛客假日团队赛10 L 乘积最大 (dp,大数)
  6. DOCKER windows 安装Tomcat内容
  7. 【JZOJ4920】【NOIP2017提高组模拟12.10】降雷皇
  8. IBM 2nm芯片弯道超车了?他连车都没有
  9. mysqlbinlog unknown variable:default-character-set=gbk
  10. timequest静态时序分析学习笔记之命令约束
  11. 通俗易懂的信息熵与信息增益(IE, Information Entropy; IG, Information Gain)
  12. Java项目:外卖订餐管理系统(java+SSM+JSP+jQuery+Ajax+mysql)
  13. 前端——面试(苏小妍)
  14. HMI-29-【运动模式】转速表实现及中心油耗仪表实现
  15. 高仿QQ发送语音界面
  16. TI官网注册账号一直卡人机识别问题
  17. python mitmproxy +雷电模拟器 安装
  18. JS实现抖音小姐姐表白源码
  19. 走进MySQL---分享dept、emp、bonus、salgrade员工信息管理表
  20. [011量化交易] python根据收盘价计算涨跌百分比

热门文章

  1. group by 和 left join 哪个慢_手机自带内存和扩展内存一样吗?哪个更好?
  2. 服务器每秒钟执行命令数量是什么_全国自考互联网及其应用模拟试卷(一)及答案.doc...
  3. python 残差图_python 残差图
  4. linux web文件夹权限设置,WEB文件目录权限设置与修改方法
  5. .net 怎么在控制器action中返回一个试图_一个view事件分发,面试官6连问直击灵魂,我被虐的体无完肤...
  6. button layui 点击事件_Layui 带多选框表格监听事件以及按钮自动点击写法实例
  7. (二) shiro入门 :输出 hello world
  8. JAVA就业面试题之单例模式
  9. 将一个数字划分成树状
  10. 【Nutch2.2.1源代码分析之5】索引的基本流程