在使用hibernate進行查詢時,使用得最多的仍是經過構建hql進行查詢了。在查詢的過程中,除使用常常的查詢對象方法以外,還會遇到查詢一個屬性,或一組彙集結果的狀況。在這種狀況下,咱們一般就須要對返回的結構進行處理。
通常狀況下,咱們經過構建hql,並經過設置query的resultTransformer來定製返回結果的類型,通常設置爲map屬性,以下所示:php
1
2
|
Query query = session.createQuery(
"hql"
);
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
|
來指定查詢結果的每一項爲一個map。
不過,隨着hibernate的發展,能夠在hql中直接使用集合查詢語句,如list和map了。如下分別介紹使用list和map時的查詢語句以及查詢結果。首先,數據庫的數據以下所示:html
1
2
3
4
5
6
7
8
9
|
mysql> select * from p_dictionary;
+-----------------+----+---------+------+--------+--------+
| dictionary_type | id | version | code | forbid | value |
+-----------------+----+---------+------+--------+--------+
| COUNTY | 1 | 0 | 001 | | 四川 |
| COUNTY | 2 | 0 | 002 | | 北京 |
| COUNTY | 3 | 0 | 001 | NULL | 四川 |
+-----------------+----+---------+------+--------+--------+
3 rows in set (0.00 sec)
|
如下分別介紹使用list和map的查詢語句和查詢結果:java
使用listmysql
1
2
3
4
5
|
String query =
"select new list(p.code,p.value) from Dictionary p"
;
List list = session.createQuery(query).list();
System.out.println(list);
//結果
[[
001
, 四川], [
002
, 北京], [
001
, 四川]]
|
使用map,首先不指定alias,則結果的鍵就按照查詢出來的順序結果,使用0,1來表示keysql
1
2
3
4
|
String query =
"select new map(p.code,p.value) from Dictionary p"
;
List list = session.createQuery(query).list();
//結果
[{
1
=四川,
0
=
001
}, {
1
=北京,
0
=
002
}, {
1
=四川,
0
=
001
}]
|
使用map,指定alias,則結果中的key則爲alias數據庫
1
2
3
4
|
String query =
"select new map(p.code as code,p.value as value) from Dictionary p"
;
List list = session.createQuery(query).list();
//結果
[{value=四川, code=
001
}, {value=北京, code=
002
}, {value=四川, code=
001
}]
|
若是部分使用alias,部分不使用,則使用了alias的將使用alias做爲key,沒有使用的則仍然使用序號代替,其中序號則爲在查詢結果的序號session
1
2
3
4
|
String query =
"select new map(p.code as code,p.value) from Dictionary p"
;
List list = session.createQuery(query).list();
//結果
[{
1
=四川, code=
001
}, {
1
=北京, code=
002
}, {
1
=四川, code=
001
}]
|
轉自:https://www.iflym.com/index.php/code/use-list-set-map-in-hibernate-query.htmlide