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

来源:互联网 发布:类似tnt的网络邮箱 编辑:程序博客网 时间:2024/06/03 22:29

今天遇到一问题,之前好好的系统,现在不管查询什么,都会报错:Result map does not contain a value for Java.lang.Integer

仔细想想,报错的地方的代码都没有动过,唯一只有一个地方的代码是报错前新增的:

[html] view plain copy
  1. <select id="select" resultMap="java.lang.Integer" parameterType="java.lang.Integer" >  
  2.     SELECT CASE WHEN moneyIS NULL THEN 0 ELSE moneyEND AS money  
  3.     FROM (  
  4.         select SUM(money) AS money  
  5.         from ABC  
  6.         where user_id = #{user_id,jdbcType=INTEGER} AND state = 11 AND is_del = 0  
  7.     ) t  
  8.   </select>  
相对应的Dao中的代码:

[java] view plain copy
  1. int selectTotalMoney(Integer userid);  

估计问题就是在这里了。

于是经过反复尝试,发现一个好的解决办法:

[html] view plain copy
  1. <resultMap id="ResultOfInteger" type="java.lang.Integer">  
  2.     <result column="budget" property="budget" jdbcType="INTEGER" />  
  3. </resultMap>  
[html] view plain copy
  1. <select id="select" resultMap="ResultOfInteger" parameterType="java.lang.Integer" >  
  2.     SELECT CASE WHEN moneyIS NULL THEN 0 ELSE moneyEND AS money  
  3.     FROM (  
  4.         select SUM(money) AS money  
  5.         from ABC  
  6.         where user_id = #{user_id,jdbcType=INTEGER} AND state = 11 AND is_del = 0  
  7.     ) t  
  8. </select>  
其实仔细一看,只是换了个表达方式而已,最终返回的值还是Integer,我只能说myBatis太死板了,以上仅为个人见解,若有不对之处,欢迎指正。



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


PS:

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

原创粉丝点击