Query接口學習筆記

 
在Hibernate3.0中廢除了find()方法,取而代之的是Query接口
一、綁定參數
1、使用“?”指定參數
通過Query接口可以先設定查詢參數,然後通過setXXX()等方法,將指定的參數值填入,而不用每次編寫完整的HQL。
 Query query = session.createQuery(“from Student s where s.age>? and s.name like ?”)
 query.setInteger(0,25);
 query.setString(1,”%clus%”);
       ……………….
2、使用“:“後跟變量的方法設置參數
可以使用命名參數來取代“?“設置參數的方法,這可以不用來依照特定的順序來設定參數值,比如上面的示例代碼也可以寫爲:
Query query = session.createQuery(“from Student s where s.age>:minAge and s.name like :likeName”)
 query.setInteger(minAge,25);
 query.setString(likeName,”%clus%”);
………………..
4、setEntity()方法
setEntity()方法把參數與持久化類的示例綁定
Team team = (Team)session.get(Team.class,”aaa565efc767”);
Query query = session.createQuery(“from Student s where s.team>:team”)
query. setEntity(“team”,team);
…………………………..
5、setParameter()方法
      setParameter()方法全稱是setParameter(String paraName,實例,實例類型),這個方法可以綁定任意類型的參數。如可把上面的改寫爲:
        query.setParameter(“team”,team,Hibernate.entity(Team.class)),其中,Hibernate.entity()指定映射的Hibernate 類型,也可以不要,如:
 query.setParameter(“team”,team)
……………..
6、setPropertyies()方法
     setPropertyies()的全稱是setPropertyies(類實例)。它將類實例的屬性名與參數值相對應,如:
Student   stu = new Student();
Stu.setAge(99);
Query query = session.createQuery(“from Student s where s.age=:age”);
 query.setProperties(stu);
……………….
二、使用命名查詢
     可以將HQL語句寫在程序之外,以避免硬編碼在程序之中,需要的時候可以隨時更改,在*.hbm.xml中使用<query/>標籤,並在<![CDATA[]]>之間編寫HQL,編寫的位置是在</class>節點之後</hibername-mapping>節點之間。如:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
          "-//Hibernate/Hibernate Mapping DTD//EN"
          "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.kissjava.Student" table="student" lazy="true">
       <id name="id" unsaved-value="null">
           <generator class="uuid.hex"/>
       </id>
       <property name="name" type="string"/>
       <property name="age" type="int"/>
    </class>
    <!-- 設置命名查詢 -->
    <query name="namedQueryAgeName"><!-- 此查詢被調用的名字 -->
       <![CDATA[
              from Student s where s.age>:minAge and s.name like:likeName
           ]]>
    </query>
</hibernate-mapping>
<query>name屬性用來設定查詢外部HQL時的名稱依據,使用命名查詢的源碼如下:
Query query = session.getNamedQuery(“namedQueryAgeName”)
 query.setInteger(minAge,25);
 query.setString(likeName,”%clus%”);
………………..
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章