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類型時

[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. select id="getUserIdByName" parameterType="string" resultType="int">  
  2.     SELECT  
  3.           id  
  4.     FROM user  
  5.     WHERE userName = #{userName}  
  6.   </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

[html] view plain copy
  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>  

service層如果需要int數據類型,可以自動從Integer進行轉換, 當然有可能加入一些判斷,比如Integer爲Null,賦給int可以先轉成0
發佈了116 篇原創文章 · 獲贊 18 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章