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

 在使用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

相關文章
相關標籤/搜索