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 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号