Posted on 2005-12-08 13:29
Kela 閱讀(304)
評論(0) 編輯 收藏 所屬分類:
我的筆記(Hibernate)
Hibernate Query Language(HQL)
相對于Criteria提供的符合面向對象風格的查詢封裝模式。HQL提供了更加豐富靈活的特性,它在涵蓋Criteria功能范圍的前提下,提供了更加強大的查詢(在Hibernate3中增加了實體的更新,刪除)能力。更多的HQL使用方法請參考Hibernate開發手冊和其它網絡資源。HQL為官方推薦查詢模式。
示例:StudentCriteriaQuery.java一個基于HQL的查詢,更新,刪除。
/**
* StudentHQL.java
* Hibernate Query Language(HQL)
*/
package com.kela.hb.model;
import java.util.Iterator;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.kela.hb.pojo.KelaStudent;
import com.kela.hb.util.HibernateUtil;
/**
* @author kangfeng(kela.kf@gmail.com)
*
*/
public class StudentHQL {
/*
* 實體查詢(查詢數據庫表中所有的紀錄)
*/
public void exampleSelect_1(){
Session session;
Query query;
String hql;
try {
session = HibernateUtil.currentSession();
//查詢符合相應編號和年齡大于25的學生紀錄
hql = " from com.kela.hb.pojo.KelaStudent as kelaStudent " +
" where kelaStudent.stuID = '402880fc07dfe16f0107dfe173640001' " +
" or kelaStudent.stuAge > 25";
query = session.createQuery(hql);
List list = query.list();
Iterator it = list.iterator();
while(it.hasNext()) {
KelaStudent kelaStudent = (KelaStudent)it.next();
System.out.print(" 姓名:" + kelaStudent.getStuName());
System.out.print(" 性別:" + kelaStudent.getStuSex());
System.out.print(" 年齡:" + kelaStudent.getStuAge());
System.out.print(" 地址:" + kelaStudent.getStuAddress());
System.out.println();
}
} catch(HibernateException he) {
System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
/*
* 屬性查詢(查詢數據庫表中需要的若干個字段)
* 返回類型為數組方式
*/
public void exampleSelect_2(){
Session session;
Query query;
String hql;
try {
session = HibernateUtil.currentSession();
//查詢KELA_STUDENT中字段為StuName,StuAge,StuAddress的所有紀錄
//同樣也可以加一些條件
hql = " select kelaStudent.stuName, kelaStudent.stuAge, kelaStudent.stuAddress " +
" from com.kela.hb.pojo.KelaStudent as kelaStudent ";
query = session.createQuery(hql);
List list = query.list();
Iterator it = list.iterator();
while(it.hasNext()) {
Object[] rs = (Object[])it.next();
System.out.print(" 姓名:" + rs[0]);
System.out.print(" 年齡:" + rs[1]);
System.out.print(" 地址:" + rs[2]);
System.out.println();
}
} catch(HibernateException he) {
System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
/*
* 參數綁定(使用順序占位符 ? ),相當于我們經常使用的:
* select * from KELA_STUDENT where KelaID = ? and KelaAge > ?
*/
public void exampleSelect_3(){
Session session;
Query query;
String hql;
try {
session = HibernateUtil.currentSession();
//查詢符合相應編號和年齡大于20的學生紀錄
hql = " from KelaStudent as kelaStudent " +
" where kelaStudent.stuID = ? or kelaStudent.stuAge >= ?";
query = session.createQuery(hql);
//注意了是從0開始的
query.setString(0, "402880fc07dfe16f0107dfe173640001");
query.setInteger(1, 20);
List list = query.list();
Iterator it = list.iterator();
while(it.hasNext()) {
KelaStudent kelaStudent = (KelaStudent)it.next();
System.out.print(" 姓名:" + kelaStudent.getStuName());
System.out.print(" 性別:" + kelaStudent.getStuSex());
System.out.print(" 年齡:" + kelaStudent.getStuAge());
System.out.print(" 地址:" + kelaStudent.getStuAddress());
System.out.println();
}
} catch(HibernateException he) {
System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
/*
* 參數綁定(使用引用占位符 : ),相當于我們經常使用的:
* select * from KELA_STUDENT where KelaID = ? and KelaAge > ?
*/
public void exampleSelect_4(){
Session session;
Query query;
String hql;
try {
session = HibernateUtil.currentSession();
//查詢符合相應編號的學生紀錄
hql = " from KelaStudent as kelaStudent " +
" where kelaStudent.stuID = :stuID ";
query = session.createQuery(hql);
//stuID 對應 :stuID
query.setParameter("stuID", "402880fc07dfe16f0107dfe173640001");
List list = query.list();
Iterator it = list.iterator();
while(it.hasNext()) {
KelaStudent kelaStudent = (KelaStudent)it.next();
System.out.print(" 姓名:" + kelaStudent.getStuName());
System.out.print(" 性別:" + kelaStudent.getStuSex());
System.out.print(" 年齡:" + kelaStudent.getStuAge());
System.out.print(" 地址:" + kelaStudent.getStuAddress());
System.out.println();
}
} catch(HibernateException he) {
System.out.println("[提示]: 查詢數據發生錯誤," + he.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
/*
* 利用HQL的更新
*/
public void exampleUpdate() {
Session session;
Transaction tran;
Query query;
String hql;
try {
session = HibernateUtil.currentSession();
tran = session.beginTransaction();
hql = " update KelaStudent " +
" set stuAge = 30 " +
" where stuID = '402880fc07dfe16f0107dfe173640001' ";
query = session.createQuery(hql);
System.out.println("更新的紀錄條數是:" + query.executeUpdate());
tran.commit();
} catch (HibernateException he) {
System.out.println("[提示]: 更新數據發生錯誤," + he.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
/*
* 利用HQL的刪除
*/
public void exampleDelete() {
Session session;
Transaction tran;
Query query;
String hql;
try {
session = HibernateUtil.currentSession();
tran = session.beginTransaction();
hql = "delete KelaStudent where stuID = '402880fc080437200108043725760001'";
query = session.createQuery(hql);
System.out.println("刪除紀錄的條數是:" + query.executeUpdate());
tran.commit();
} catch(HibernateException he) {
System.out.println("[提示]: 刪除數據發生錯誤," + he.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
public static void main(String[] args) {
StudentHQL studentHQL = new StudentHQL();
studentHQL.exampleSelect_1();
}
}