转载自:http://blog.csdn.net/u010448530/article/details/52023256
今天遇到一问题,之前好好的系统,现在不管查询什么,都会报错:Result map does not contain a value for Java.lang.Integer
仔细想想,报错的地方的代码都没有动过,唯一只有一个地方的代码是报错前新增的:
<select id="select" resultMap="java.lang.Integer" parameterType="java.lang.Integer" >
SELECT CASE WHEN moneyIS NULL THEN 0 ELSE moneyEND AS money
FROM (
select SUM(money) AS money
from ABC
where user_id = #{user_id,jdbcType=INTEGER} AND state = 11 AND is_del = 0
) t
</select>
相对应的Dao中的代码:
int selectTotalMoney(Integer userid);
估计问题就是在这里了。
于是经过反复尝试,发现一个好的解决办法:
<resultMap id="ResultOfInteger" type="java.lang.Integer">
<result column="budget" property="budget" jdbcType="INTEGER" />
</resultMap>
<select id="select" resultMap="ResultOfInteger" parameterType="java.lang.Integer" >
SELECT CASE WHEN moneyIS NULL THEN 0 ELSE moneyEND AS money
FROM (
select SUM(money) AS money
from ABC
where user_id = #{user_id,jdbcType=INTEGER} AND state = 11 AND is_del = 0
) t
</select>
其实仔细一看,只是换了个表达方式而已,最终返回的值还是Integer,我只能说myBatis太死板了,以上仅为个人见解,若有不对之处,欢迎指正。
经过测试,将resultMap=”java.lang.Integer” 改成 resultType=”java.lang.Integer” 也可以解决问题。