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

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

  业务举例:有订单表(主) 和 订单明细表(从),订单表有主键 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);
        }        

 

posted @ 2020-06-15 21:33  木子李和三点水  阅读(630)  评论(0编辑  收藏  举报