在Hibernate3.0中廢除了find()方法,取而代之的是Query接口
一、綁定參數(shù)
1、使用“?”指定參數(shù)
通過(guò)Query接口可以先設(shè)定查詢(xún)參數(shù),然后通過(guò)setXXX()等方法,將指定的參數(shù)值填入,而不用每次編寫(xiě)完整的HQL。
Query query = session.createQuery(“from Student s where s.age>? and s.name like ?”)
query.setInteger(0,25);
query.setString(1,”%clus%”);
……………….
2、使用“:“后跟變量的方法設(shè)置參數(shù)
可以使用命名參數(shù)來(lái)取代“?“設(shè)置參數(shù)的方法,這可以不用來(lái)依照特定的順序來(lái)設(shè)定參數(shù)值,比如上面的示例代碼也可以寫(xiě)為:
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()方法把參數(shù)與持久化類(lèi)的示例綁定
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()方法全稱(chēng)是setParameter(String paraName,實(shí)例,實(shí)例類(lèi)型),這個(gè)方法可以綁定任意類(lèi)型的參數(shù)。如可把上面的改寫(xiě)為:
query.setParameter(“team”,team,Hibernate.entity(Team.class)),其中,Hibernate.entity()指定映射的Hibernate 類(lèi)型,也可以不要,如:
query.setParameter(“team”,team)
……………..
6、setPropertyies()方法
setPropertyies()的全稱(chēng)是setPropertyies(類(lèi)實(shí)例)。它將類(lèi)實(shí)例的屬性名與參數(shù)值相對(duì)應(yīng),如:
Student stu = new Student();
Stu.setAge(99);
Query query = session.createQuery(“from Student s where s.age=:age”);
query.setProperties(stu);
……………….
二、使用命名查詢(xún)
可以將HQL語(yǔ)句寫(xiě)在程序之外,以避免硬編碼在程序之中,需要的時(shí)候可以隨時(shí)更改,在*.hbm.xml中使用<query/>標(biāo)簽,并在<![CDATA[與]]>之間編寫(xiě)HQL,編寫(xiě)的位置是在</class>節(jié)點(diǎn)之后</hibername-mapping>節(jié)點(diǎn)之間。如:
<?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>
<!-- 設(shè)置命名查詢(xún) -->
<query name="namedQueryAgeName"><!-- 此查詢(xún)被調(diào)用的名字 -->
<![CDATA[
from Student s where s.age>:minAge and s.name like:likeName
]]>
</query>
</hibernate-mapping>
<query>的name屬性用來(lái)設(shè)定查詢(xún)外部HQL時(shí)的名稱(chēng)依據(jù),使用命名查詢(xún)的源碼如下:
Query query = session.getNamedQuery(“namedQueryAgeName”)
query.setInteger(minAge,25);
query.setString(likeName,”%clus%”);
………………..
只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。 | ||
![]() |
||
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問(wèn)
|
||