最近在做关联数据插入的时候,遇到一个问题,先描述一下我遇到的问题:
有三张表:商品表:goods(id,name,price)
订单表:payment(id,payment_date,count)
关系表:relation(id,goods_id,payment_id)
那么我想实现的是在订单表中批量插入数据,那么对应的,relation表中也应该批量的插入数据,且relation表中的payment_id应该和刚插入payment表的id匹配,首先想到的是payment表使用数据库的自增,然后relation根据payment表的最大id来插入数据,但有一个局限是payment表的最大id必须和payment表自增的数相同,不然会出现relation表中插入的数据,匹配不上payment表的数据。
就会出现以下的的现象:
改进方法:不使用数据库的自增,而是每次在向payment表插入数据时,查询payment表当前的最大id值+1,然后通过集合的索引,向表中插入数据
payment表的sql语句
<insert id="insertPaymentBatch"> <selectKey keyProperty="id" resultType="int" order="BEFORE"> SELECT MAX(id)+1 FROM payment </selectKey> insert into payment(id,payment_date,count) values <foreach collection="list" item="item" separator="," index="index"> (#{id}+#{index},#{item.payment_date},#{item.count}) </foreach> </insert>
relation表的sql语句
<insert id="insertRelationBatch"> <selectKey keyProperty="id" order="BEFORE" resultType="int"> SELECT MAX(id)+1 FROM payment </selectKey> insert into relation(payment_id,goods_id) values <foreach collection="goodsList" item="item" separator="," index="index"> (#{id}+#{index},#{item}) </foreach> </insert>然后就可以解决上面遇到的问题了。