mybatis查询类型为int的字段,返回null的异常

原文链接:http://www.cnblogs.com/dingchenghong/archive/2012/07/04/2576504.html

项目中用mybatis3.x,用sql查询某个表类型为int的字段,那个表是空表,没有数据,结果抛异常了,原因是在对象中的属性为int,空表时,sql查询出来的是NULL,结果赋值时抛异常了。

org.apache.ibatis.binding.BindingException: Mapper method 'getSort' (xx.yy.cc.DxxDAO) attempted to return null from a method with a primitive return type (int).

抛这样的异常。

解决这个问题,是当查出来为NULL时,结一个默认值,如:0。

mysql:

SELECT IFNULL(MAX(SORT),0)AS sort FROM web_d_info

oracle:

SELECT nvl(MAX(SORT),0) as sort FROM web_d_info


如果上述方法无效,请使用以下解决方案:

转:http://blog.csdn.net/just_lion/article/details/9700793

当配置mybatis返回int类型时

  1. select id="getUserIdByName" parameterType="string" resultType="int">  
  2.     SELECT  
  3.           id  
  4.     FROM user  
  5.     WHERE userName = #{userName}  
  6.   </select>  
select id="getUserIdByName" parameterType="string" resultType="int">
    SELECT
    	  id
    FROM user
    WHERE userName = #{userName}
  </select>

会报错如下:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Mapper method 'com.bill.springMybatis.dao.UserDao.getUserIdByName attempted to return null from a method with a primitive return type (int).
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:734)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
    org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

解决方案,返回类型设置为封装类型Integer而不是基本类型int

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4.   
  5. <mapper namespace="com.bill.springMybatis.dao.UserDao">  
  6.   
  7.   <cache />  
  8.   <select id="getUserIdByName" parameterType="string" resultType="Integer">  
  9.     SELECT  
  10.           id  
  11.     FROM user  
  12.     WHERE userName = #{userName}  
  13.   </select>  
  14.     
  15. </mapper>  
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.bill.springMybatis.dao.UserDao">

  <cache />
  <select id="getUserIdByName" parameterType="string" resultType="Integer">
    SELECT
    	  id
    FROM user
    WHERE userName = #{userName}
  </select>
  
</mapper>

service层如果需要int数据类型,可以自动从Integer进行转换, 当然有可能加入一些判断,比如Integer为Null,赋给int可以先转成0


工程源码:

http://download.csdn.net/detail/sundongsdu/5851343


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值