这里就牵扯到一个知识点, 就是resultMap 和 resultType的区别
我以前是很明确的知道这两个分别的,但是当我用起来的的时候,就忘记了。。没有特别注意打的是map还是type
Dao:
Integer queryBookQuantity(RentalBook rBooks);
XML:
<select id="queryBookQuantity" parameterType="com.neusoft.demo.entity.RentalBook" resultMap="Integer">
select quantity from t_book where book_id = #{bookId}
</select>
应该修改成
<select id="queryBookQuantity" parameterType="com.neusoft.demo.entity.RentalBook" resultType="Integer">
select quantity from t_book where book_id = #{bookId}
</select>
我第一次就是像上面这么写的,报了标题的那个错误。
对了 这里Integer 是为了没有数据的时候 报错是没有可用的数据
然后 就这个 resultMap 找了快十分钟 愣是没看见这个错误, 后来 我才想起来 返回值 是要用type 为什么要用map 我真的傻了
这样我给大家一个用resultMap的例子
<resultMap id="ReaderResultMap"
type="com.neusoft.demo.entity.User">
<result column="user_name" property="userName"/>
<result column="sex" property="sex"/>
<result column="email" property="email"/>
<result column="count" property="readerCount"/>
</resultMap>
<select id="getRankListReader" resultMap="ReaderResultMap"
parameterType="java.lang.String">
SELECT
u.user_name,
sex,
email,
COUNT( u.user_id ) AS count
FROM
t_rental r
JOIN t_user u ON u.user_id <![CDATA[ = ]]>
r.user_id
AND DATE_SUB(
CURDATE( ), INTERVAL 30 DAY ) <![CDATA[ <= ]]>
rental_datetime
GROUP BY
u.user_id
ORDER BY
count DESC
</select>
就是类似上面这种
如果有parameterType和resultType分不清的小伙伴,可以把这两个理解为 parameterType是传入的值类型; resultType 是 传出的值类型,这个类型要与Dao层的方法返回值一致才可以。