mybatis會根據查詢的結果集初始化java實例。java
若是是複雜類型,咱們通常都會在mapper中作好映射。mybatis
1.因此若是查詢到的是多個結果,那麼對應的java類型也必須的集合類型。(result 爲泛型或者集合元素類型,dao接口必須爲集合)app
如: xml:<select id='xx' resultType='java.lang.String'> 接口:String[] xx();xml
2.可是有一種,結果集雖然是多個,可是須要是一個實例。接口
如:查詢班級及學生 SELECT * FROM clazz LEFT JOIN student on。。。。io
咱們對應java實例就是clazz即{ clazzName, student[] }。泛型
因此這條語句,只要不是隻有一個學生那麼確定會有多條結果。可是咱們須要mybatis爲咱們建立一個實例。select
這個也就是 resultMap,resultType 的區別。resultMap 是咱們作好映射關係的,裏面有collection屬性,因此mybatis會爲咱們建立一個實例。map
若是使用resultType ,mybatis就會說:Expected one result (or null) to be returned by selectOne() 。查出來好幾個,你就要一個,要哪一個啊?查詢
因此,出現這個問題 Expected one result (or null) to be returned by selectOne()。第一是產生多個結果,咱們也要多個,可是接收類型寫錯了。第二就是產生多個,可是咱們須要一個,(由於多個結果其實對java是一個實例)那麼就是映射沒有作好,或者使用了resultType,而不是resultMap。