2016-07-04 95 views
1

MyBatis可以返回結果的HashMap而不是List? 例如給定一個表:在MyBatis(而不是List)中返回結果的HashMap

foo | bar 
1 | a 
2 | b 

和查詢

SELECT foo, bar FROM foobar 

回報HashMap<String, String> map結果,其中map.get(1) == 'a'map.get(2) == 'b'等?

我試過的變化在以下方面:

<resultMap id="hashMapResult" type="java.util.HashMap"> 
     <id column="foo" /> 
     <result property="bar" column="bar"/> 
    </resultMap> 

    <select id="personStatuses" resultMap="hashMapResult"> 
     SELECT foo, bar FROM foobar 
    </select> 

但是,僅僅得到錯誤:Expected one result (or null) to be returned by selectOne(), but found: ...

如果表有主鍵,這將是能夠得到的結果更有用一個PK =>行的Map,而不僅僅是一個行列表。

回答

1

你必須要透視表,讓列foo的行作爲列,Mybatis不能做到這一點,但您可以使用SQL來實現這一點(這裏是一個mysql溶液):

select 
    max(case when foo = 1, then bar else null end) as `1`, 
    max(case when foo = 2, then bar else null end) as `2` 
from foobar; 
0

使用像下面一樣,你的多個結果將被處理,沒有任何問題。

// in your mapper XML 
<select id="personStatuses" resultType="java.util.HashMap" > 
     SELECT foo, bar FROM foobar 
</select> 

// From Java code - list of hashmaps 
List<HashMap> personStatuses = yourMyBatisDao.personStatuses(); 

sysout(personStatuses); 
+0

這只是返回一個像正常的List,而不是PK =>行的HashMap – Mark

相關問題