请选择 进入手机版 | 继续访问电脑版

mybatis主表与明细表(父子表)一对多的同时插入操作

[复制链接]
发表于 2019-12-16 16:13:15 |显示全部楼层
对主表(采购申请表)和明细表(申请物资表)同时进行插入操作insert:
20180807205247338.png


<!--对申请主表插入一条记录 -->
  1. <insert id="save" parameterType="com.bootdo.purchase.domain.ApplyDo" useGeneratedKeys="true" keyProperty="applyId">
  2.     INSERT INTO pur_apply
  3.     (apply_no,apply_depart_id,apply_person_id,apply_date,apply_estiamount,apply_status)
  4.     VALUES
  5.     (#{applyNo},
  6.     (SELECT dept_id FROM mat_department WHERE dept_name = #{deptName} ),
  7.     (SELECT sta_id FROM mat_staff WHERE sta_name = #{staName} ),
  8.     #{applyDate},#{applyEstiAmount},#{applyStatus})
  9.     <selectKey keyProperty="applyId" resultType="Integer" order="AFTER">
  10.         SELECT LAST_INSERT_ID()
  11.     </selectKey>
  12. </insert>
复制代码



以上注:useGeneratedKeys="true" keyProperty="applyId"  或  <selectKey keyProperty="applyId" resultType="Integer" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey>,可获取数据表中的自增的apply_id存放在持久类ApplyDo中的属性名applyId,applyId也是明细表对应主表的外键,对应持久类ApplyItemDo中的属性名itemApplyId.

<!--对明细表插入单条记录 -->
  1. <insert id="saveDetail" parameterType="com.bootdo.purchase.domain.ApplyItemDo" >
  2.     INSERT INTO pur_apply_detail
  3.     (item_apply_id,item_name,item_type,item_number,item_unit,item_estiprice,item_purpose,item_demdate,item_remake)
  4.     VALUES
  5.     (#{itemApplyId},#{itemName},#{itemType},#{itemNumber},#{itemUnit},#{itemEstiprice},#{itemPurpose},#{itemDemdate},#{itemRemake})
  6. </insert>
复制代码



ApplyServiceImpl.java:
@Autowired
public ApplyDao applyDao;
@Override
public int save(ApplyDo applyDo) {
    //主表插入一条记录
    int count = applyDao.save(applyDo);
    int count2 = 0;
    int applyId = applyDo.getApplyId();
    //明细表插入多条记录
    for(ApplyItemDo items : applyDo.getItemDoList() ){
        items.setItemApplyId(applyId);
        count2 = applyDao.saveDetail(items);
    }
    return count2;
}
------------------------------------------------------
表结构(Mysql):
          Purchase(采购主表) :id,name
          PurchaseInfo(采购明细表) id,name,purchaseid,number

前端页面:bootstrap-table
  
            
后端代码:        @RequestMapping(value="/save")
        @ResponseBody
        public AjaxResult addSave(@RequestBody Purchase purchase)
        {
             int count=purchaseService.insertHdRkd(purchase);
             int purchase_id=purchase.getId(); //获取插入的采购单ID

             for(PurchaseInfo items : purchase.PurchaseInfo ()){
                   items.setPurchaseId(purchase_id);
                   purchaseInfoService.insertPurchaseInfo(items);
             }

         }
         
     

插入数据的时候验证是否有重复:
  1. HdCkgoods hdCkgoods=new HdCkgoods();
  2.                 List<HdCkgoods> hdCkgoodslist = hdCkgoodsService.selectHdCkgoodsList(hdCkgoods); //list1
  3.                
  4.                 List<HdCkrkdmx> rkdmxList=hdRkd.getHdckckdmx(); //List2
  5.                
  6.                 for(int j=0;j<rkdmxList.size();j++) {
  7.                        
  8.                        
  9.                         int goodscount = hdCkgoodslist.size();
  10.                         HdCkrkdmx items=rkdmxList.get(j); //
  11.                         String hwmc=items.getHWMC();
  12.                         for(int i=0;i<hdCkgoodslist.size();i++) {
  13.                                 System.out.println("不走-----");
  14.                                 if(hwmc.equals(hdCkgoodslist.get(i).getName())) {
  15.                                         HdCkgoods goods=hdCkgoodslist.get(i);
  16.                                         int count2=items.getHWSL()+Integer.parseInt(goods.getNumber());
  17.                                     hdCkgoods.setNumber(String.valueOf(count2));
  18.                                     hdCkgoods.setId(goods.getId());
  19.                                     hdCkgoods.setSpec(items.getsPECSNAME());
  20.                                     hdCkgoods.setSpec(items.getoEMNAME()); //
  21.                                     hdCkgoodsService.updateHdCkgoods(hdCkgoods);
  22.                                     //continue;
  23.                                 }else {
  24.                                         System.out.println("不走"+goodscount);
  25.                                         goodscount=goodscount-1;
  26.                                 }
  27.                                
  28.                         }
  29.                         System.out.println(goodscount);
  30.                         if(goodscount==0) {
  31.                                 HdCkrkdmx rkdmx=rkdmxList.get(j);
  32.                                 hdCkgoods.setNumber(rkdmx.getHWSL().toString());
  33.                                 hdCkgoods.setName(rkdmx.getHWMC());
  34.                                 hdCkgoods.setSpec(rkdmx.getsPECSNAME());
  35.                                 hdCkgoodsService.insertHdCkgoods(hdCkgoods);
  36.                     }
  37.                        
  38.                 }
复制代码









您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|沙漏笔记

GMT+8, 2020-11-27 07:16 , Processed in 0.147394 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Copyright © 2015-2018 xuejava网 / 鲁ICP备17054568号-1
回顶部