MyBatis(三) 解决设置数据库自增后,导致两表关联插入的数据不匹配问题

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41541619/article/details/79914766

        最近在做关联数据插入的时候,遇到一个问题,先描述一下我遇到的问题:

        有三张表:商品表: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>

然后就可以解决上面遇到的问题了。

展开阅读全文

没有更多推荐了,返回首页