修改报销单,新增条目空指针异常

修改报销单,新增条目空指针异常

ClaimVoucherBizImpl类中,报销单修改的方法中,一旦新增新的条目,还是空指针

餐饮这个条目是我新增的条目,claimVoucherId也有了,加上了这句话也没有用

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

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

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

最后还是报的空指针异常啊,新增条目,压根就进入不了ClaimVoucherItemDao.insert方法中,就抛出invocationtargetexception异常,

这是对应的ClaimVoucherItemDao.xml

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.4//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 这里按照mybatis-3-mapper.dtd的约束去编写xml文档 -->
<mapper namespace="com.imooc.oa.dao.ClaimVoucherItemDao">

   <resultMap id="claimVoucherItem" type="ClaimVoucherItem">
       <id property="id" column="id" javaType="Integer"></id>
       <result property="claimVoucherId" column="claim_voucher_id" javaType="Integer"></result>
       <result property="item" column="item" javaType="String"></result>
       <result property="amount" column="amount" javaType="Double"/>
       <result property="comment" column="comment" javaType="String"></result>
   </resultMap>

   <!-- 添加报销单条目 -->
   <insert id="insert" parameterType="ClaimVoucherItem">
       INSERT INTO claim_voucher_item(claim_voucher_id,item,amount,comment)
       VALUES(#{claimVoucherId},#{item},#{amount},#{comment})
   </insert>
   <!-- 删除报销单条目 -->
   <delete id="delete" parameterType="Integer">
     delete from claim_voucher_item where id=#{id}
   </delete>
   <!-- 修改报销单条目 -->
   <update id="update" parameterType="ClaimVoucherItem">
       update claim_voucher_item set claim_voucher_id=#{claimVoucherId},
       item=#{item},amount=#{amount},comment=#{comment}
       where id=#{id}
   </update>
   <!--  那么查询多个报销单条目的话,根据报销单id来查询 -->
   <select id="selectByClaimVoucher" parameterType="Integer" resultMap="claimVoucherItem">
       select *
       from
       claim_voucher_item
       where claim_voucher_id=#{cvid}
       order by id
   </select>
</mapper>

正在回答

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

1回答

if语句中再加个判断条件试试,如下:

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

祝学习愉快!

  • 奶茶三兄弟d 提问者 #1
    //迭代新的条目 for(ClaimVoucherItem item:items){ item.setClaimVoucherId(claimVoucher.getId()); if(item.getId()>0 && item.getId()!=null){ //说明数据库中存在的,更新内容 claimVoucherItemDao.update(item); }else{ claimVoucherItemDao.insert(item); } } 没有用,该试的我都试过了,逻辑上也对啊,调式的时候,就是进入不了else语句中,还是空指针,就是新增不了新的条目
    2018-04-25 12:02:07
  • 好帮手慕珊 回复 提问者 奶茶三兄弟d #2
    if(item.getId()>0 && item.getId()!=null)这个反过来写,不等于null,放前面if(item.getId()!=null&&item.getId()>0 )如果为null就不执行&&后面的语句了
    2018-04-25 13:30:09
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
SSM主流框架入门与综合项目实战2018版
  • 参与学习           人
  • 提交作业       205    份
  • 解答问题       4317    个

Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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