入門 06 - Query介面
来源:互联网 发布:安卓rpg游戏知乎 编辑:程序博客网 时间:2024/06/04 15:32
除了直接使用find()方法並配合HQL來進行查詢之外,我們還可以透過 net.sf.hibernate.Query介面的實例來進行查詢,透過Query介面,您可以先設定查詢參數,之後透過setXXX()等方法,將指定的參數值填入,而不用每次都撰寫完整的HQL,直接來看個例子:
Query query = session.createQuery("select user.name from User as user where user.age = ? and user.sex = ?");query.setInteger(0, 25);query.setCharacter(1, 'M'); List names = query.list();for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) { String name = (String) iterator.next(); System.out.println("name: " + name);}
在設定參數值時,必須依照 ? 所設定的順序,並使用對應型態的setXXX()方法,一個執行的例子如下:
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).log4j:WARN Please initialize the log4j system properly.Hibernate: select user0_.name as x0_0_ from USER user0_ where (user0_.age=? )and(user0_.sex=? )name: Bush
您可以使用命名參數(Named Parameter)來取代這個方法,這可以不用依照特定的順序來設定參數值,並擁有較好的可讀性,直接來看個例子:
Query query = session.createQuery("select user.name from User as user where user.age = :age and user.sex = :sex");query.setInteger("age", 25);query.setCharacter("sex", 'M');List names = query.list();for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) { String name = (String) iterator.next(); System.out.println("name: " + name);}
設定命名參數時,在建立Query時先使用:後跟著參數名,之後我們就可以在setXXX()方法中直接指定參數名來設定參數值,而不用依照特定的順序。
我們也可以將HQL撰寫在程式之外,以避免硬編碼(hard code)在程式之中,在需要修改HQL時就很方便,在*.hbm.xml中使用<query/>標籤,並在<![CDATA[與]] >之間撰寫HQL,撰寫的位置是在</hibernate-mapping>之前,例如:
User.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"><hibernate-mapping> <class name="onlyfun.caterpillar.User" table="USER"> <id name="id" type="string"> <column name="user_id" sql-type="char(32)" /> <generator class="uuid.hex"/> </id> <property name="name" type="string" not-null="true"> <column name="name" length="16" not-null="true"/> </property> <property name="sex" type="char"/> <property name="age" type="int"/> </class> <query name="onlyfun.caterpillar.queryUser"> <![CDATA[ select user.name from User as user where user.age = :age and user.sex = :sex ]]> </query></hibernate-mapping>
<query>的name屬性用來設定查詢外部HQL時的名稱依據,使用的例子如下:
Query query = session.getNamedQuery("onlyfun.caterpillar.queryUser");query.setInteger("age", 25);query.setCharacter("sex", 'M');List names = query.list();for (ListIterator iterator = names.listIterator(); iterator.hasNext(); ) { String name = (String) iterator.next(); System.out.println("name: " + name);}
更多有關於Hibernate查詢的操作,您可以查看參考手冊的第九章內容。
- 入門 06 - Query介面
- 入門 06 - Query介面
- 入門 06 - Query介面
- XP介面
- SQL介面
- Java最簡單介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- Vista 與輸入法程式介面
- 开心一刻 ^_^
- 获取字符串的像素宽度
- 入門 05 - 基本資料查詢
- CSDN Blog新版首页和新功能发布通告
- 了解程序经理
- 入門 06 - Query介面
- 为事业而学习
- 明天又要去出差
- 今天自己完成了一个小程序
- 2006-5-20 ASP ACCESS 数据检索, 按拼音查找变态法 By Stabx
- 《操作系统教程》读书笔记(1)
- 博客主人简介
- LIS系统通讯程序原理与实现
- HIS医保接口设计规范