首页 > 其他 > 详细

MyBatic,主从表同时写入键值传递

时间:2020-06-15 21:53:13      阅读:39      评论:0      收藏:0      [点我收藏+]

一.抛出问题,在有主从表的结构中,从表的外键引用了主表的主键,在主表插入数据后,需要将主键值传递给从表才能完成从表数据的写入

  业务举例:有订单表(主) 和 订单明细表(从),订单表有主键 Id ,订单明细表有外键 “订单Id"

      技术分享图片

 

 二.解决方案

  1.在主表插入数据时,在MyBatis中 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键,而后映射到实体类属性

<!--要有主从表键值传递,useGeneratedKeys必填,置为true,表示插入后返回主键-->
    <!--keColumn指定数据库主键,代表取出的主键值所在列名,如果当主键列不是表中的第一列的时候,是必须设置-->
    <!--keyProperty实体类中对应的主键(此处是映射Order表中的id)-->
    <insert id="add" parameterType="Order" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
        insert into mall_order(userid,orderno,orderdate,consignee,phonenum,recaddress,cost,status,paytype,paydate,recdate,onshow)
        values(#{userId},#{orderNo},#{orderDate},#{consignee},#{phoneNum},#{recAddress},#{cost},#{status},#{payType},#{payDate},#{recDate},#{onShow})
    </insert>

  2.从表插入不需多余设置

  3.使用键值传递

 OrderDAO orderDAO = MallUtils.getDAO(OrderDAO.class);
         //调用add方法时,主键被取出映射到实体中   
        orderDAO.add(order);
        OrderDetilsDAO orderDetilsDAO=MallUtils.getDAO(OrderDetilsDAO.class);
        for (OrderDetils detils:orderDetils){
            //取实体中保存的主表主键,赋值给从表中的对它的引用外键
           //Order.id---> OrderDetils.orderId
            detils.setOrderId(order.getId());
            orderDetilsDAO.add(detils);
        }        

 

MyBatic,主从表同时写入键值传递

原文:https://www.cnblogs.com/liyanglin/p/13138031.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!