MyBatis查询无记录时返回值报错怎么办

MyBatis查询无记录时返回值报错怎么办

本篇内容主要讲解“MyBatis查询无记录时返回值报错怎么办”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MyBatis查询无记录时返回值报错怎么办”吧!

MyBatis查询无记录的返回值

在MyBatis 3.4.1下

如果Dao的返回值是实体,则select查询无记录时返回null。容易报空指针异常!

MyBatis查询无记录时返回值报错怎么办

NoticefindById();

如果Dao的返回值是List,则select查询无记录是返回的是[],也就是空数组,

而不是null。所以这时候判空需要用CollectionUtils.isNotEmpty(),而不是"==null"

List<Notice>findById();

查询无结果时的返回值报错问题

mybatis的查询无结果时报错

(方法名)queryAllNumFromCart attempted to return null from a method with a primitive return type (long)的问题

queryAllNumFromCart此方法在mapper.xml中是这样定义的:

<selectid="queryAllNumFromCart"parameterType="java.lang.Integer"resultType="java.lang.Long">selectsum(num)fromt_cartwhereuser_id=#{userId}</select>

在mapper中是这样定义的:

longqueryAllNumFromCart(IntegeruserId);//返回值为long类型

调用后运行报错:

java.lang.RuntimeException: org.apache.ibatis.binding.BindingException: Mapper method 'com.egoo.mapper.CartMapper.queryAllNumFromCart attempted to return null from a method with a primitive return type (long).
org.apache.ibatis.binding.BindingException: Mapper method 'com.egoo.mapper.CartMapper.queryAllNumFromCart attempted to return null from a method with a primitive return type (long).
at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:94)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:59)
at com.sun.proxy.$Proxy16.queryAllNumFromCart(Unknown Source)
at com.egoo.service.impl.CartServiceImpl.getTotalFromMysql(CartServiceImpl.java:370)
at com.alibaba.dubbo.common.bytecode.Wrapper2.invokeMethod(Wrapper2.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:47)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:76)
at com.alibaba.dubbo.config.invoker.DelegateProviderMetaDataInvoker.invoke(DelegateProviderMetaDataInvoker.java:52)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:62)
......

主要报错原因的语句为:

(method)attempted to return null from a method with a primitive return type (long)

此方法企图从定义了原始的返回类型(long)的方法中返回null ,显而易见,此处的返回值类型有问题。网上搜了之后发现是mybais的返回值为包装类,且sql语句的定义的返回值类型为:java.lang.Long。查询数据库为空后,会返回null而不是0L,所以此处需要将方法的返回值类型改为包装类java.lang.Long:

//LongqueryAllNumFromCart(IntegeruserId);//当查询到的数据为0条时,会返回null,而不是0,可以改为包装类

或者在sql语句中加入IFNULL(expr1,expr2)的函数进行判断:

selectIFNULL(sum(num),0)fromt_cartwhereuser_id=1

建议还是使用修改sql语句的方式。

到此,相信大家对“MyBatis查询无记录时返回值报错怎么办”有了更深的了解,不妨来实际操作一番吧!这里是恰卡编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

发布于 2022-01-21 23:15:52
收藏
分享
海报
0 条评论
44
上一篇:在Windows系统上怎么用QT5实现一个时钟桌面 下一篇:PHP的async-helper怎么安装使用
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码