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

mybatis的查询无结果时报错:(方法名)queryAllNumFromCart attempted to return null from a method with a primitive return type (long)的问题

queryAllNumFromCart此方法在mapper.xml中是这样定义的:
 <select id="queryAllNumFromCart" parameterType="java.lang.Integer" resultType="java.lang.Long">
  	select sum(num) from t_cart where user_id = #{userId}
  </select>

在mapper中是这样定义的:

long queryAllNumFromCart(Integer userId);  //返回值为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:

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

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

select IFNULL(sum(num),0) from t_cart where user_id = 1

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值