在hibernate中查詢使用list,map定製返回類型

 在使用hibernate進行查詢時,使用得最多的還是通過構建hql進行查詢了。在查詢的過程當中,除使用經常的查詢對象方法之外,還會遇到查詢一個屬性,或一組聚集結果的情況。在這種情況下,我們通常就需要對返回的結構進行處理。
    一般情況下,我們通過構建hql,並通過設置query的resultTransformer來定製返回結果的類型,一般設置爲map屬性,如下所示:

1
2
Query query = session.createQuery("hql");
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);

    來指定查詢結果的每一項爲一個map。
    不過,隨着hibernate的發展,可以在hql中直接使用集合查詢語句,如list和map了。以下分別介紹使用list和map時的查詢語句以及查詢結果。首先,數據庫的數據如下所示:

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的查詢語句和查詢結果:

    使用list

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來表示key

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,沒有使用的則仍然使用序號代替,其中序號則爲在查詢結果的序號

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.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章