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

对主表(采购申请表)和明细表(申请物资表)同时进行插入操作insert:

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

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

<!--对明细表插入单条记录 -->
<insert id="saveDetail" parameterType="com.bootdo.purchase.domain.ApplyItemDo" >
    INSERT INTO pur_apply_detail
    (item_apply_id,item_name,item_type,item_number,item_unit,item_estiprice,item_purpose,item_demdate,item_remake)
    VALUES
    (#{itemApplyId},#{itemName},#{itemType},#{itemNumber},#{itemUnit},#{itemEstiprice},#{itemPurpose},#{itemDemdate},#{itemRemake})
</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;
}
 
  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
MyBatis是一种Java持久化框架,它提供了一种简单而灵活的方式来访问数据库。在MyBatis中,通过配置XML文件和Java注解,可以实现数据库表之间的关联查询,包括一对多关系。 在MyBatis中实现一对多关系的连表查询,可以通过两种方式来实现:嵌套查询和嵌套结果映射。 1. 嵌套查询: 在嵌套查询中,首先查询主表的数据,然后根据主表的某个字段值作为条件,再次查询关联表的数据。这样可以通过两次查询来获取一对多关系的数据。 示例代码如下: ```xml <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT * FROM orders </select> <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="Item"> <id property="id" column="item_id"/> <result property="name" column="item_name"/> </collection> </resultMap> ``` 2. 嵌套结果映射: 在嵌套结果映射中,可以通过一次查询将主表和关联表的数据一起查询出来,并通过结果映射将其组装成一对多的数据结构。 示例代码如下: ```xml <select id="getOrderWithItems" resultMap="orderResultMap"> SELECT o.order_id, o.order_no, i.item_id, i.item_name FROM orders o LEFT JOIN items i ON o.order_id = i.order_id </select> <resultMap id="orderResultMap" type="Order"> <id property="id" column="order_id"/> <result property="orderNo" column="order_no"/> <collection property="items" ofType="Item"> <id property="id" column="item_id"/> <result property="name" column="item_name"/> </collection> </resultMap> ``` 以上是使用MyBatis实现一对多关系的连表查询的两种方式。通过配置合适的SQL语句和结果映射,可以轻松地获取一对多关系的数据。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值