问题描述:
想生成一年内除节假日外,每一天对应某个实验室的某个时间段的记录表,也就是三个字段,日期yyyy-MM-dd、实验室ID、时间段ID,然后具体的数据记录表引用这个表的主键作为外键
实现思路:
####这样大批量生成不能够是一条记录一条SQL语句,而应该是一条SQL语句插入所有记录
遇到问题:
####报错,输出的SQL语句要么少逗号,要么多逗号,要么生成记录重复,要么生成记录缺少
原因:
####对多个集合进行遍历时没有对结尾进行判断,以及对separator的滥用
解决:
<insert id="batchCreate" parameterType="java.util.List" statementType="PREPARED">
INSERT INTO
g_items_lab_appointment_condition(day,timeSlotId,labId)
VALUES
<foreach collection="days" item="day" index="c">
<foreach collection="slots" item="slot" index="b">
<foreach collection="labs" item="lab" index="a">
<if test="c == days.size - 1 and a == labs.size - 1 and b == slots.size - 1">
(cast(#{day} as date),#{slot.id},#{lab.id})
</if>
<if test="c != days.size - 1 or a != labs.size - 1 or b != slots.size - 1">
(cast(#{day} as date),#{slot.id},#{lab.id}) ,
</if>
</foreach>
</foreach>
</foreach>
</insert>
代码解析:
请注意看两个if语句内得内容,差别是一个逗号!!!
第一个if语句判断当三层循环都到最后,也就是循环到了最后一次,SQL语句连接的value(***)后就不能再加逗号了,否则就会造成语法错误,其余的则要在最后加上逗号,问题解决!
如有错误,非常感谢您的评论或是来信指正!970766540@qq.com