MyBatis的返回参数类型分两种
- 对应的分类为:
1.1. resultMap :
1.2. resultType :
2 . 对应返回值类型:
2.1. resultMap : 结果集[对象等]
2.2. resultType : Integer,String ,Long ,class
- 注意点:
在MyBatis进行查询映射时,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。
3.1 当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时
候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。
3.2 当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,这常常在复杂查询中很有作用。
4.使用resultType 后面只能跟一个对象的属性
<select id="countTheNumberOfPatentsInEachArea" resultType="java.lang.String">
select area ,count(*) AS 'count' from t_patent group by area
</select>
上面的sql语句在数据库中查询是完全没有问题的 但是 用到mybatis里面就会包错,错误如下:
Invalid value for getInt() - '丽水市'; nested exception is java.sql.SQLException: Invalid value for getInt()
意思就是数据库中count(*)查询出来的是int类型,但是我们返回的却是String类型,所以就出现了错误
所以我们可以通过resultMap 来解决
<resultMap id="CountResultMap" type="com.boku.www.utils.Count" >
<result column="area" property="area" jdbcType="VARCHAR" />
<result column="count" property="count" jdbcType="INTEGER" />
</resultMap>
<select id="countTheNumberOfPatentsInEachArea" resultMap="CountResultMap">
select area ,count(*) AS 'count' from t_patent group by area
</select>
这样把area 和count查询出来放在一个对象Count里面,就能够装不同的数据类型了。