hibernate HQL查询几种参数绑定

 Hibernate中存在4种参数绑定的方式,下面我们将分别介绍:

   A、 按参数名称绑定:
  在HQL语句中定义命名参数要用:开头,形式如下:
  Query query=session.createQuery("from Emp where ename=:names and job=:jobs");
  query.setString(names,name);
  query.setString(jobs,job);
  上面代码中用:ename:job分别定义了命名参数namesjobs,然后用Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。


  B、 按参数位置邦定:
  在HQL查询语句中用?来定义参数位置,形式如下:
  Query query=session.createQuery(from Emp where ename=?and job=?);
  query.setString(0,name);
  query.setString(1,job);
  同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(0开始编号),第二个参数仍然代表参数实际值。
  注:在实际开发中,提倡使用按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。


  C setParameter()方法:
  在HibernateHQL查询中可以通过setParameter()方法邦定任意类型的参数,如下代码:
  String hql=from Emp where ename=:names";
  Query query=session.createQuery(hql);
  //query.setParameter(names,name);

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


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

   //封装条件并赋值
  Emps customer=new Emps ();
  customer.setName(JHON);
  customer.setJob("CLERK");

      //HQL语句
  Query query=session.createQuery(from Emp where ename=? and job=?);

     //设置实体对象
  query.setProperties(customer);
  setProperties()方法会自动将customer对象实例的属性值匹配到命名参数上,但是要求命名参数名称必须要与实体对象相应的属性同名

你可能感兴趣的:(hibernate HQL查询几种参数绑定)