MyBatis查询无记录时的返回值问题

 更新时间:2022年01月21日 14:50:33   作者:郝大侠001  
这篇文章主要介绍了MyBatis查询无记录时的返回值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MyBatis查询无记录的返回值

在MyBatis 3.4.1下

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

Notice findById();

如果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中是这样定义的:

 <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语句的方式。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot中使用 RabbitMQ的教程详解

    SpringBoot中使用 RabbitMQ的教程详解

    这篇文章主要介绍了SpringBoot中使用 RabbitMQ的教程详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • 通过Java连接SQL Server数据库的超详细操作流程

    通过Java连接SQL Server数据库的超详细操作流程

    java相对于其他语言(例如c,c++等)连接数据库要方便得多,那么如何连接呢?下面这篇文章主要给大家介绍了关于通过Java连接SQL Server数据库的超详细操作流程,需要的朋友可以参考下
    2023-03-03
  • 剑指Offer之Java算法习题精讲二叉树专项训练

    剑指Offer之Java算法习题精讲二叉树专项训练

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • Lombok在idea中的使用教程

    Lombok在idea中的使用教程

    Lombok是一个可以通过简单的注解形式,来帮助我们简化消除一些必须有但显得很臃肿(如果getter、setter方法)的Java代码的工具,通过使用对应的注解,可以在编译源码的时候生成对应的方法,这篇文章主要介绍了Lombok在idea中的使用,需要的朋友可以参考下
    2023-03-03
  • java正则表达式获取url的host示例

    java正则表达式获取url的host示例

    使用httpclient抓取页面信息时需要填写HOST,使用此正则提取抓取URL的HOST内容
    2014-02-02
  • java 集合并发操作出现的异常ConcurrentModificationException

    java 集合并发操作出现的异常ConcurrentModificationException

    Map在遍历时候通常 现获得其键值的集合Set,然后用迭代器Iterator来对Map进行遍历。
    2009-06-06
  • Java中关于isEmpty方法、null以及““的区别

    Java中关于isEmpty方法、null以及““的区别

    这篇文章主要介绍了Java中关于isEmpty方法、null以及““的区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • SpringBoot中Redis的缓存更新策略详解

    SpringBoot中Redis的缓存更新策略详解

    这篇文章主要介绍了SpringBoot中Redis的缓存更新策略,缓存一般是为了应对高并发场景、缓解数据库读写压力,而将数据存储在读写更快的某种存储介质中(如内存),以加快读取数据的速度,需要的朋友可以参考下
    2023-08-08
  • Spring之@Qualifier注解的具体使用

    Spring之@Qualifier注解的具体使用

    本文主要介绍了Spring之@Qualifier注解的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-08-08
  • Springboot基于maven打包分离lib及resource

    Springboot基于maven打包分离lib及resource

    这篇文章主要介绍了Springboot基于maven打包分离lib及resource,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10

最新评论