mybatis mysql int 返回结果为null的解决

本文详细解析了MyBatis框架中出现的BindingException错误,特别是关于返回值为int的方法尝试返回null的问题。提供了两种解决方案:一是调整mapper.xml文件中的SQL语句;二是修改mapper.java接口方法的返回类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误信息

org.apache.ibatis.binding.BindingException: Mapper method 'com.*******Mapper.countByExample attempted to return null from a method with a primitive return type (int).

对于这个问题,一般情况下在百度找到的答案可参考以下

http://blog.youkuaiyun.com/just_lion/article/details/9700793
http://houseyoung.cn/?p=73

原因大多为

  1. mapper.xml文件中配置了select返回值为int,但实际的sql查询结果为null (问题出在mapper.xml的情况)
  2. mapper.xml中对应select语句的返回值为Integer,而mapper.java中接口方法的返回值为int,所以查不到值时,Integer对应的返回值为null无法转换成int (问题出在mapper.java的情况)

总的来说解决方案有两个

  1. 修改mapper.xml文件,对select语句或者返回值进行修改
  2. 修改mapper.java源码,修改出错语句对应的接口方法返回值为可接收null的类型,再于service代码中进行处理

mybatis与pagehelper的组合使用中出现以上异常

参考信息

http://www.jb51.net/article/99537.htm

里面有说到

//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
//紧跟着的第一个select方法会被分页
List list = countryMapper.selectIf(1);

于是乎调用了

PageHelper.startPage(1, 10); 

语句后,下一条select语句将不会时执行mapper.xml中原本的语句,而是被修改后的select语句

于是,若一位粗心的程序员使用了

PageHelper.startPage(1, 10); 

这句分页代码,接下来却以这样的习惯编码,而没有使用PageHelper的page对象

//分页
PageHelper.startPage(page, rows);
//获取结果总数
Integer total = countByExample(example);
//获取当前页结果
List rows = selectByExample(example);

就会导致分页代码对countByExample进行了分页,而没有对selectByExample分页,这样导致的后果就是若总数为零时会报错,同时将无法实现分页功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值