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>