hql语句之参数绑定

 博客中涉及到的表结构以及表关系如下:

使用参数绑定的好处
    1).可读性好
    2).性能提高
    3).防止sql注入


关于sql注入(拿sql语句来说):
      select * from student where sid=001 and sxy='计算机学院';
      以上sql语句可能查出来这个学生,也可能没有这个学生,但是在这个sql语句后面加上一个 or 1=1;即:
      select * from student where sid=001 and sxy='计算机学院' or 1='1';
      这样子的话所有的数据都会被查出来。这就牵扯到一个安全性的问题


参数绑定的两种形式(以学院和年龄为例):
    1)

//给第1,2个位置分别赋值,但是它是从0开始的(跟整型赋值的时候可以用字符串的形式也可以用整形    的形式关于set...()的方法有很多,具体可以看帮助文档)
List<Student> list = session.createQuery("from Student where sxy=? and sage>?").setString(0,"计算机学院").setString(1,"2").list();

    2)

//冒号后面的sxy1和sage2可以写成任何名字,这里只是相当于给这个位置取了一个名字为的就是用于接下来的赋值
List<Student> list = session.createQuery("from Student where sxy=:sxy1 and sage=:sage2").setString("sxy1","计算机学院").setString("sage2","2").list();

当然以上代码也可以分步写  例如 第一种形式的代码可以写成(这样子写就有点像JDBC中使用preparedStatement.setObject(1,"");了):

 Query query = session.createQuery("from Student where sxy=? and sage>?");
 query.setString(0,"计算机学院");//给第一个问号赋值
 query.setString(1,"2");//给第二个问号赋值
 List<Student> list = query.list();

猜你喜欢

转载自blog.csdn.net/My_name_is_ZwZ/article/details/82859869