Posted on 2005-12-06 13:31
Kela 閱讀(329)
評論(0) 編輯 收藏 所屬分類:
我的筆記(Hibernate)
使用Criteria Query 進行數據查詢
Criteria Query 是一種通過對象化的查詢,并將數據查詢條件封裝為一個對象。
簡單來看,可以看作是傳統SQL的對象化表示,如:
criteria = session.createCriteria(KelaStudent.class);
criteria.add(Expression.eq("stuName", "鄧立強"));
這相當于SQL的 " select * from KELA_STUDENT where StuName = '鄧立強' "
這種方式的特點是比價符合Java程序員的編碼習慣,非常的容易上手。
更多的使用方法和參數,參考Hibernate文檔和深入淺出Hibernate等資料。
示例一:StudentCriteriaQuery.java 一個基本 Criteria Query 的查詢
/**
* StudentCriteriaQueryl.java
*
* 基于 Criteria Query 的對象化查詢
*/
package com.kela.hb.model;
import java.util.Iterator;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.Expression;
import com.kela.hb.pojo.KelaStudent;
import com.kela.hb.util.HibernateUtil;
/**
* @author kangfeng(kela.kf@gmail.com)
*
*/
public class StudentCriteriaQuery {
/*
* 帶有表達式的 Criteria 查詢
*/
public void exampleSelect_1() {
Session session;
Criteria criteria;
try {
session = HibernateUtil.currentSession();
criteria = session.createCriteria(KelaStudent.class);
//關于Expression提供的對應查詢限定機制, 可在Hibernate的文檔中獲得詳細資料
//如果沒有一下的查詢條件則查詢所有的數據庫 KELA_STUDENT 的紀錄
//查詢數據庫表 KELA_STUDENT 中 StuName = '鄧立強'的紀錄,
//查詢條件中的stuName對應com.kela.hb.pojo.KelaStudent的屬性stuName
//criteria.add(Expression.eq("stuName", "鄧立強"));
//查詢年齡大于25歲的學生紀錄
criteria.add(Expression.gt("stuAge", new Integer(25)));
//如果同時出現幾個限定條件,如 StuName = '鄧立強'; stuAge > 25 則取交集
KelaStudent kelaStudent = new KelaStudent();
List list = criteria.list();
Iterator it = list.iterator();
while(it.hasNext()) {
kelaStudent = (KelaStudent)it.next();
System.out.print(" 編號:" + kelaStudent.getStuID());
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 e) {
System.out.println("[提示]: 查詢沒有成功," + e.getMessage());
} finally {
HibernateUtil.closeSession();
}
}
/*
* 示例查詢,根據已有的對象,查詢屬性與之相符的其它對象
*/
public List exampleSelect_2(KelaStudent kelaStudent) {
Session session;
Criteria criteria;
try {
session = HibernateUtil.currentSession();
criteria = session.createCriteria(KelaStudent.class);
criteria.add(Example.create(kelaStudent));
return criteria.list();
} catch (HibernateException he) {
System.out.println("[提示]: 查詢發生錯誤," + he.getMessage());
return null;
} finally {
HibernateUtil.closeSession();
}
}
/*
* 調用示例查詢,并打印結果
* 這種查詢并不常用,但是在組合查詢中非常的有用途。
* 比如要查詢的條件有多個,但不能確定的時候,可以按照下面的例子使用,直接設定查詢的條件,
* 然 后將對象傳入即可查詢。
*/
public void exampleSelect_3() {
KelaStudent kelaStudent = new KelaStudent();
//在這里可以設置多個條件,如年齡,地址等
kelaStudent.setStuName("鄧立強");
List list = exampleSelect_2(kelaStudent);
Iterator it = list.iterator();
while(it.hasNext()) {
kelaStudent = (KelaStudent)it.next();
System.out.print(" 編號:" + kelaStudent.getStuID());
System.out.print(" 名稱:" + kelaStudent.getStuName());
System.out.print(" 性別:" + kelaStudent.getStuSex());
System.out.print(" 年齡:" + kelaStudent.getStuAge());
System.out.print(" 地址:" + kelaStudent.getStuAddress());
System.out.println();
}
}
public static void main(String[] args) {
StudentCriteriaQuery scq = new StudentCriteriaQuery();
//查詢年齡大于25的學生紀錄
scq.exampleSelect_1();
//按照給定的條件進行查詢,這里為 name = '鄧立強'
//scq.exampleSelect_3();
}
}