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。