当我们使用MyBatis3查询数据库时,如果你将resultType设置为基本数据类型(如:resultType=int),但是数据查询没有返回结果,此时将NULL赋值给int类型的变量就会抛出BindingException异常信息。
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)
上面就是说com.bill.springMybatis.dao.UserDao.getUserIdByName方法返回的为null,绑定到原始类型int变量上面失败了。
方法一:使用不同数据库的SQL语句,当返回空时返回一个默认值,这种方法比较简单,也比较笨拙。因为你需要处理不同数据库的SQL语句。
mysql数据库:
SELECT IFNULL(MAX(N_ID),0)AS sort FROM T_USER
oracle数据库:
SELECT nvl(MAX(N_ID),0) as sort FROM T_USER
方法二:将返回类型resultType设置成hashmap,然后在代码中做判断处理。
mapper文件如下:
<select id="getColumnMaxVal" resultType="hashmap"> SELECT MAX(N_ID) as N_MAXVALUE FROM T_USER </select>
java代码如下:
Map<String,Object> maxValMap = publicMapper.getColumnMaxVal(); long maxValue = 0; if ( null != maxValMap ) { Object maxValObj = maxValMap.get("N_MAXVALUE"); if ( null != maxValObj ) { maxValue = (Long)maxValObj; } }
点击学习 MyBatis 教程,了解更多的 MyBatis 知识!