-
查詢單個對象
1、Query接口定義了uniqueResult方法,該方法強制返回結(jié)果只存在一個實例對象,而不再返回list集合形式的查詢結(jié)果。
2、使用uniqueResult方法注意,通過where子句設(shè)置恰當?shù)臈l件,保證符合查詢條件的實例對象僅有一個,或者不存在,如果設(shè)置的查詢條件不當,查詢返回的實例對象多余一個,該方法就會拋出異常,終止運行。
案例:
案例2:設(shè)置查詢條件返回結(jié)果不唯一
查看全部 -
四則運算(+、-、*、/):對選擇的屬性做一些需要的運算。
1、HQL語句中也可以使用+、-、*、/四則運算。
2、四則運算可以在where子句和select子句中使用
案例:查詢5件商品價格大于3000元的商品
查看全部 -
集合運算:HQL語句提供比較特殊的運算符,持久化映射中,存在一對多的映射配置,這里就可以使用集合運算符做相應(yīng)的判定運算。
集合運算符:Hibernate框架會在hql解析過程中,解析成相應(yīng)sql語句時
把empty——>exists把member of——>in運算。
1、is [not] empty判斷集合類型屬性[不]為空,不包含任何元素。
2、member of判斷實例是否屬于該集合
案例:查詢訂單明細不為空的有效訂單
查看全部 -
邏輯運算:通過邏輯運算符,將邏輯表達式按照邏輯運算規(guī)則,形成一個新的邏輯表達式。
邏輯運算符:and(邏輯與)——如果邏輯表達式運算結(jié)果都為true則為true否則就為false、or(邏輯或)——如果邏輯表達式運算結(jié)果都為false則為false否則就為true、not(邏輯非)——對布爾運算結(jié)果取反。
案例:查詢商品價格在100到5000元之間,并且類型為電腦類型
案例2:查詢商品價格在100到5000之間或者是電腦類型
查看全部 -
字符串模式匹配:通過使用like關(guān)鍵字和通配符,對字符串類型的屬性進行匹配運算(模糊查詢)。
通配符:%、_。一個%形式可以匹配任意個字符,一個_形式匹配一個字符。
案例:查詢顧客名字姓張的,并且有兩個字的用戶。
案例2:查詢地址在北京的顧客信息(因為北京在地址中不固定,所以使用%通配符)
查看全部 -
范圍運算:判斷屬性值是否在給定的條件范圍之內(nèi)。
1、[not] in (列表)————進行的范圍運算,in關(guān)鍵字后為候選值列表,該候選值列表可以明確指出也可以是子查詢,當屬性值在候選列表中存在返回true,否則返回false。
2、[not] between 值1 and 值2————指定一個值的范圍,只要屬性值在這個范圍內(nèi),該運算就返回true值,否則返回false。
案例:通過in關(guān)鍵字查詢用戶年齡20和40的用戶
案例2:查詢年齡在20到40之間的用戶
查看全部 -
null值判斷運算
案例:查詢商品描述為null的商品
查看全部 -
比較運算:持久化類的屬性與給定的查詢條件進行比較。
1、比較運算符:=、<>、<、>、>=、<=。
2、null值判斷————is [not] null,HQL中允許使用相等和不等進行null值判斷,Hibernate框架會將x=null解析成x is null,x<>null解析成x is not null。
案例:查詢價格大于400的商品
查看全部 -
本章內(nèi)容簡介
where子句:邏輯表達式,設(shè)置查詢的條件,來限制返回的查詢結(jié)果,實際應(yīng)用情況中,通常要求不是返回持久化類的所有查詢結(jié)果,尤其是數(shù)據(jù)量非常龐大時。
1、比較運算
2、范圍運算
3、字符串模式匹配
4、邏輯運算
5、集合運算
6、在HQL中使用+-*/運算符
7、查詢單個對象(uniqueResult方法)
查看全部 -
通過distinct返回不重復(fù)的查詢結(jié)果
distinct關(guān)鍵字:去除查詢結(jié)果中的重復(fù)元素。
當使用select語句以后,查詢結(jié)果中的元素就不再保證是唯一的了,比如查詢客戶持久化類的時候,選擇返回性別元素(select sex from Customer c),這時返回的結(jié)果就會發(fā)生重復(fù),而在一個查詢結(jié)果中,有兩個相同的行,是沒有意義的,這時就可以使用distinct關(guān)鍵字(select distinct sex from Customer c)消除查詢結(jié)果中重復(fù)的元素。
查看全部 -
持久化類中無參構(gòu)造方法的必要性:
當我們通過select語句完成自定義構(gòu)造器查詢,持久化類中是否還需要提供無參構(gòu)造器呢?
答:持久化類中需要提供無參構(gòu)造器。因為在HQL語句中,當指定了查詢目標,并且指定了相應(yīng)構(gòu)造器后。Hibernate會調(diào)用指定的構(gòu)造器,來進行對象的創(chuàng)建以及數(shù)據(jù)的封裝,但是如果沒指定相應(yīng)的構(gòu)造器,Hibernate會調(diào)用默認的構(gòu)造器。
例如:from Seller s指定了查詢目標,但沒有指定相應(yīng)構(gòu)造器,Hibernate框架就會調(diào)用默認的構(gòu)造器。
查看全部 -
select以自定義類型返回查詢結(jié)果
1、持久化類中定義相應(yīng)的構(gòu)造器,構(gòu)造器的參數(shù)就是我們要返回的屬性信息。
2、select子句中調(diào)用定義的構(gòu)造器來完成相應(yīng)的查詢,以自定義的類型返回查詢結(jié)果。
案例:
查看全部 -
通過select子句指定返回結(jié)果類型為Map
定義:select子句中使用new map指定查詢結(jié)果的數(shù)據(jù)類型為map,并需要注意在獲取值時,Map中的key值為屬性在select語句中的相應(yīng)索引值(從0開始),并且類型為字符串類型。
查詢結(jié)果與List完全一致的
Map的get方法除了可以使用屬性在select語句中的索引位置來獲取查詢結(jié)果,還可以通過select子句中屬性取別名來獲取。
查看全部 -
通過select子句指定返回的查詢結(jié)果為list類型。
定義:select子句中使用new list指定返回的查詢結(jié)果
查看全部 -
使用select指定檢索數(shù)據(jù)以O(shè)bject[]方式返回查詢結(jié)果(使用select子句進行查詢,可以減少無用的數(shù)據(jù)傳輸量)
1、如果select子句中只是指定了查詢的對象和屬性,但是沒有指定返回的數(shù)據(jù)類型,默認的查詢結(jié)果以O(shè)bject[]形式返回。
通過別名引用持久化類中屬性的信息,返回指定屬性的對象。
案例:通過select子句指定返回對象數(shù)組類型的查詢結(jié)果,首先定義一個from子句(沒有使用select子句),這樣查詢的是所有Seller持久化類的實例。
假設(shè)查詢結(jié)果是供一個列表來使用的,列表只需要商家的名稱、電話、地址、商家的星級,如果沒有使用select子句,該查詢的結(jié)果是商家所有字段的信息,包括了其它不需要的數(shù)據(jù)信息,這樣就增加了無用的數(shù)據(jù)傳輸量,特別是表中的數(shù)據(jù)非常龐大時,會非常影響程序的性能,這時就需要使用select子句返回只需要的屬性信息來提高程序的運行效率,這里可以通過別名來引用持久化類中的相應(yīng)屬性信息。
查詢結(jié)果:
特殊情況注意:當使用select語句只查詢對象的一個屬性時,返回的數(shù)據(jù)類型就不是對象數(shù)組,而是對象Object。
select子句中不是一定使用別名來訪問對象的屬性,實際應(yīng)用開發(fā)中,from子句中通常不會查詢一個目標實體,如果多個實體目標中包含有同一個屬性,使用別名可以區(qū)分,排除錯誤的產(chǎn)生。
查看全部
舉報