HQL使用总结

示例代码:
 
  1.   Session session = HibernateSessionFactory.getSession();
  2.   session.beginTransaction();
  3.   ① HQL语言的使用
  4.   Query query = session.createQuery(" from User as user where user.id = ?");
  5.   ②Query接口的set...方法
  6.   query.setInteger(0, 1);
  7.   ③Query接口的List方法
  8.   List<User> list = query.list();
  9.   ④遍历结果集
  10.   Iterator<User> i = list.iterator();
  11.   while(i.hasNext()){
  12.    User user = i.next();
  13.    System.out.println(user.getId()+" : "+user.getName());
  14.   }
  15.   session.getTransaction().commit();
  16.   session.close();
 
1.HQL 语言与Query接口的使用
    

    HQL:Hibernate Query Language   

    HQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。   

    HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按   

   

     如下步骤进行:   

    (1)获取Hibernate Session对象;   

    (2)编写HQL语句;   

    (3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;   

    (4)如果HQL语句包含参数,调用Query的setXxx方法为参数赋值;   

    (5)调用Query对象的list等方法遍历查询结果。   

 

2.命名查询

 

 

   把查询条件放置在程序之外,避免硬编码; 在*.hbm.xml中使用<query>标签, 在<![CDATE[ code]]> 中写HQL语句
 

 

  1.  <hibernate-mapping>
  2.     <class name="po.User" table="user" catalog="mytest">
  3.         <id name="id" type="java.lang.Integer">
  4.             <column name="id" />
  5.             <generator class="uuid.hex" />
  6.         </id>
  7.         <property name="name" type="java.lang.String">
  8.             <column name="name" length="256" />
  9.         </property>
  10.         <property name="age" type="java.lang.Integer">
  11.             <column name="age" />
  12.         </property>
  13.     </class>
  14.        <query name="idNameQuery">
  15.         <![CDATA[  
  16.          from User as user where user.id = ?
  17.          ]]>
  18.        </query>
  19. </hibernate-mapping>  

 

使用getNamedQuery()方法根据query的名字属性获取hql语句,以获取Query对象。
 
 

 

  1.   Session session = HibernateSessionFactory.getSession();
  2.   session.beginTransaction();
  3.   List<User> list = session.getNamedQuery("idNameQuery").setInteger(0, 1).list();
  4.    
  5.   Iterator<User> i = list.iterator();
  6.   while(i.hasNext()){
  7.    User user = i.next();
  8.    System.out.println(user.getId()+" : "+user.getName());
  9.   }
  10.   session.getTransaction().commit();
  11.   session.close(); 
 
3. HQL的参数的绑定方式
 
     Hibernate中对动态查询参数绑定提供了丰富的支持,在Hibernate中共存在4种参数绑定的方式,下面只介绍两种:
 
A、 按参数名称绑定:
 
 在HQL语句中定义命名参数要用”:”开头,形式如下:
 
  1.   Query query=session.createQuery(“from User user where user.name = :customername and user.age = :customerage”);
  2.   query. setString(“ customername”,name);
  3.   query. setInteger(“ customerage”,age);
 
  上面代码中用:customername和:customerage分别定义了命名参数customername和customerage,然后用Query接口的setXXX()方法设定名参数值,setXXX()方法包含两个参数,分别是命名参数名称和命名参数实际值。
 
B、 按参数位置邦定:
 
  在HQL查询语句中用”?”来定义参数位置,形式如下:
 
  1.   Query query=session.createQuery(“from User user where user.name= ? and user.age = ? ”);
  2.   query.setString( 0,name);
  3.   query.setInteger( 1,age);
 
  同样使用setXXX()方法设定绑定参数,只不过这时setXXX()方法的第一个参数代表邦定参数在HQL语句中出现的位置编号(由0开始编号),第二个参数仍然代表参数实际值。
 
  注:在实际开发中,提倡使用 按名称邦定命名参数,因为这不但可以提供非常好的程序可读性,而且也提高了程序的易维护性,因为当查询参数的位置发生改变时,按名称邦定名参数的方式中是不需要调整程序代码的。

你可能感兴趣的:(xml,Hibernate)