mybatis會根據查詢的結果集初始化java實例。
如果是復雜類型,我們一般都會在mapper中做好映射。
1.所以如果查詢到的是多個結果,那么對應的java類型也必須的集合類型。(result 為泛型或者集合元素類型,dao接口必須為集合)
如: xml:<select id='xx' resultType='java.lang.String'> 接口:String[] xx();
2.但是有一種,結果集雖然是多個,但是需要是一個實例。
如:查詢班級及學生 SELECT * FROM clazz LEFT JOIN student on。。。。
我們對應java實例就是clazz即{ clazzName, student[] }。
所以這條語句,只要不是只有一個學生那么肯定會有多條結果。但是我們需要mybatis為我們創建一個實例。
這個也就是 resultMap,resultType 的區別。resultMap 是我們做好映射關系的,里面有collection屬性,所以mybatis會為我們創建一個實例。
如果使用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。
