为什么按照视频填写返回int会报错

为什么按照视频填写返回int会报错

@Test
public void testInset() throws Exception {
   SqlSession sqlSession = null;
   try {
       sqlSession = MyBatisUtils.openSession();
       Goods goods = new Goods();
       goods.setTitle("测试标题");
       goods.setSubTitle("测试副标题");
       goods.setOriginalCost(100f);
       goods.setDiscount(0.85f);
       goods.setIsFreeDelivery(1);
       goods.setCurrentPrice(14004f);
       goods.setCategoryId(43);
       GoodsDAO goodsDAO = sqlSession.getMapper(GoodsDAO.class);
       int i= goodsDAO.insert(goods);
       sqlSession.commit();
       System.out.println(goods.getGoodsId());
   } catch (Exception e) {
       if (sqlSession != null) {
       sqlSession.rollback();
       }
       throw e;
   }finally {
       if (sqlSession != null) {
           MyBatisUtils.closeSession(sqlSession);
       }
   }



}




@Select("insert into t_goods(title,sub_title,original_cost,current_price,discount,is_free_delivery,category_id) VALUES(#{title},#{subTitle},#{originalCost},#{currentPrice},#{discount},#{isFreeDelivery},#{categoryId})")
@SelectKey(statement = "select last_insert_id" ,before=false,keyProperty = "goodsId",resultType = Integer.class)
public int insert( Goods goods);




org.apache.ibatis.binding.BindingException: Mapper method 'com.imooc.mybatis.dao.GoodsDAO.insert attempted to return null from a method with a primitive return type (int).


at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:102)

at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)

at com.sun.proxy.$Proxy6.insert(Unknown Source)

at com.imooc.mybatis.MyBatisTestor.testInset(MyBatisTestor.java:44)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:498)

at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)

at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)

at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)

at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)

at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)

at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)

at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)

at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)

at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)

at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)

at org.junit.runners.ParentRunner.run(ParentRunner.java:363)

at org.junit.runner.JUnitCore.run(JUnitCore.java:137)

at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)

at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)

at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)

at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)


Disconnected from the target VM, address: '127.0.0.1:54577', transport: 'socket'


Process finished with exit code -1






然后我把返回值改成Integer就可以运行

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
好帮手慕阿莹 2019-11-09 09:51:02

同学你好,老师看报错这里同学没有写括号:

http://img1.sycdn.imooc.com//climg/5dc61ae90991fff708100155.jpg

但看同学补充的回答中有写括号(),请问是同学后来加的吗?

请问同学加了括号后,返回的还是null吗?

只有可能是同学忘记写括号的原因哦。但也还是建议同学平常也用Integer,避免返回null的时候报错。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


  • 提问者 松糕 #1
    加了()还是返回null
    2019-11-09 11:09:29
  • 好帮手慕阿莹 回复 提问者 松糕 #2
    数据库中是否有插入数据呢?同学可以查询一下数据库的数据,看看是否插入进去数据了呢?还是数据插入进去了id没有插入进去呢?祝学习愉快
    2019-11-09 15:13:59
芝芝兰兰 2019-11-08 19:39:29

同学你好。这是因为查出的结果返回值是null,null值是无法直接使用int类型接收呢,只能使用Integer。

http://img1.sycdn.imooc.com//climg/5dc552ab0906c31609080114.jpg

其实在开发中,常用的是使用Integer来接收呢~为的就是应对这种情况。

如果解答了同学的疑问,望采纳~

祝学习愉快~

  • 提问者 松糕 #1
    为什么是返回null,是不是哪里我写错了
    2019-11-08 22:02:35
提问者 松糕 2019-11-08 18:39:09

@SelectKey(statement ="select last_insert_id()",before=false,keyProperty ="goodsId",resultType =Integer.class)

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师