MyBatis查询结果为Null抛出BindingException异常

当我们使用MyBatis3查询数据库时,如果你将resultType设置为基本数据类型(如:resultType=int),但是数据查询没有返回结果,此时将NULL赋值给int类型的变量就会抛出BindingException异常信息。

当我们使用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 知识!

我们愈是学习,愈觉得自己的贫乏。 —— 雪莱
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号