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

2022-06-24 10:35:48

今天遇到一问题,之前好好的系统,现在不管查询什么,都会报错: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" 也可以解决问题。

  • 作者:迷雾骑士
  • 原文链接:https://blog.csdn.net/u010448530/article/details/52023256
    更新时间:2022-06-24 10:35:48