Mybatis父子复合对象:当开启事务条件下,父子表同时插入数据

Mybatis父子复合对象:当开启事务条件下,父子表同时插入数据

myBatis默认不支持 多语句执行sql语句后携带分号,不支持同时发出多个insert语句

解决办法:在配置jdbc驱动时,路径中加 &allowMultiQueries=true

当加上:&allowMultiQueries=true 时
1.可以在sql语句后携带分号,实现多语句执行。
2.可以执行批处理,同时发出多个SQL语句。

url:  jdbc:mysql://127.0.0.1/psc_all?characterEncoding=UTF-8&allowMultiQueries=true

实体类:

  • 父实体类中有 list<子实体类>
  • ProcDelegation 实体中有 List

父表:proc_delegation

子表:proc_delegation_detail

  • 父表.id = 子表.delegationId
  • 一对多关系

注意:父表插入一条数据,子表插入多条数据
< foreach collection=“procDelegationDetailList” item=“item” index=“no” separator=“,”>
(
#{item.id}, #{item.delegationId}
)
< /foreach>

collection:一对多,父实体类中 引入的子实体类别名
item: 自定义
注意:
因为时插入多条数据,小括号 一定要写在< foreach>标签里面,而不是定义属性写在< foreach>标签上

 <insert id="insert" keyProperty="id" useGeneratedKeys="true">
        insert into proc_delegation
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">
                id,
            </if>
            <if test="fromUserId != null and fromUserId!=''">
                from_user_id,
            </if>
            <if test="fromUserName != null and fromUserId!=''">
                from_user_name,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">
                #{id,jdbcType=CHAR},
            </if>
            <if test="fromUserId != null and fromUserId!=''">
                #{fromUserId,jdbcType=VARCHAR},
            </if>
            <if test="fromUserName != null and fromUserName!=''">
                #{fromUserName,jdbcType=VARCHAR},
            </if>
        </trim>
        ;
        insert into proc_delegation_detail
        (
            id,
            delegation_id
        )
        values
        <foreach collection="procDelegationDetailList" item="item" index="no" separator=",">
         (
            #{item.id},
            #{item.delegationId}
          )
        </foreach>
        ;
    </insert>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值