Hibernate的QBC檢索方式

2022-07-23 16:30:27 字數 2931 閱讀 1299

一直習慣了hibernate的hql查詢,一直也覺得挺方便,對於最近專案裡出現的qbc(org.hibernate.criteria介面)也是報著一種看看的心理,因為做j2ee這麼久了,也寫了一大堆hql的工具類,起初的心理也只是看看而已

session session =hibernatesessionfactory.currentsession();

首先從工廠類中獲得乙個session,這個沒什麼好說的.用myeclipse的人都知道可以自動生成,以及從threadlocal內獲取乙個連線,這樣可以防止lazy異常以及提高效率

下面就是主角了,現在假設有乙個student類,內有id,name,age屬性

string hql = "from student s";

按照以前的做法,我通常是

query query = session.createquery(hql);

或者要按照條件檢索的話.

string hql = "from student s where s.name like '王%'"

query query = session.createquery(hql);

不用hql而使用qbc的話,那麼**為:

criteria criteria =session.createcriteria(student.class);

criterion criterion = expression.like("name","王%");

這樣還看不出來.那我們把檢索條件加上年齡為22.

hql:

string hql = "from student s where s.name like '王%' and s.age= 22 ";

query query = session.createquery(hql);

list list = query.list();

qbc:

criteria criteria =session.createcriteria(student.class);

criterion criterion1 = expression.like("name","王%");

或者「criteria.add(restrictions.eq(propertyname, value))」

因為public final class expression extends restrictions

criterion criterion2 = expression.eq("age",newinteger(22));

criteria.add(criterion1).add(criterion2);

list list = criteria.list();

看上去煩瑣很多.但是做過專案的人都知道,當乙個模組業務邏輯發生改變的時候,往往要重寫sql,最煩也是最討厭的就是拿著別人的hql或者sql,兩眼瞪的溜園找到底要修改什麼地方呢?

如果使用qbc大大的增加了**的可讀性,以及可維護性.

需要注意的是null值

比如我們要查詢姓名為null的student物件時應該這麼寫

criteria criteria =session.createcriteria(student.class);

criterion criterion = expression.isnull("name");

criteria.add(criterion).list();

以及使用between...and的時候

criteria criteria =session.createcriteria(student.class);

criterion criterion1 = expression.ge("age",new integer(20));//下限

criterion criterion2 = expression.le("age",new integer(25));//上限

//這裡也可以把上述兩個條件新增到第三個條件裡

criterion criterion3 =expression.and(criterion1,criterion2);

criteria.add(criterion3).list();

相當於from student s where s.age between 20 and 25

等同於from student s where s.age >= 20 and s.age <=25

下面是就hql和qbc常用的查詢條件做的比較

表示式含義

hqlqbc

大於等於

>=

expression.ge()

大於》expression.gt()

小於等於

<=

expression.le()

小於<

expression.lt()等於=

expression.eq()

不等於<> 或者!=

expression.ne()

為空is null

expression.isnull()

不為空is notnull

expression.isnotnull()

在指定範圍內

betweenand

expression.between()

不在指定範圍

not betweenand

expression.not(expression.between())

屬於某個集合

inexpression.in()

不屬於某個集合

notin

expression.not(expression.in())

與and

expression.and()或or

expression.or()

非not

expression.not()

模糊查詢

like

expression.like()

QBC檢索方式

依賴介面 criteria 資料模型 tb user userid,username tb addr addrid,addrname,userid entity class addr class user 備註 省略geters 和 seters 例 criteria c session.creat...

QBC檢索方式

技術分析之qbc檢索方式 0.qbc query by criteria 按條件進行查詢 1.簡單查詢,使用的是criteria介面 listlist session.createcriteria customer.class list for customer customer list 2.排序...

Hiberante中的QBC檢索方式

qbc就是query by criteria qbc是hibernate提供的幾種檢索方式之一。一 這裡先小做乙個總結 hibernate檢索物件的方式有哪些呢?1 導航物件圖檢索方式。根據已經載入的物件,導航到其他物件。比如 對於已經載入的班級物件class1.呼叫它的getstudents 方法...