myBatis如何返回count(*)得到的int值

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://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太死板了,以上仅为个人见解,若有不对之处,欢迎指正。



个人原创,转载请指明出处。


PS:

    经过测试,将resultMap="java.lang.Integer" 改成 resultType="java.lang.Integer" 也可以解决问题。

展开阅读全文

没有更多推荐了,返回首页