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

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

有三张表:商品表: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>
然后就可以解决上面遇到的问题了。

猜你喜欢

转载自blog.csdn.net/qq_41541619/article/details/79914766