mybatismapper文件多层循环生成大量数据

版权声明:总结不易,希望转发时可以带上原文地址,万分感谢! https://blog.csdn.net/baidu_38609744/article/details/82191319

问题描述:


想生成一年内除节假日外,每一天对应某个实验室的某个时间段的记录表,也就是三个字段,日期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(***)后就不能再加逗号了,否则就会造成语法错误,其余的则要在最后加上逗号,问题解决!

如有错误,非常感谢您的评论或是来信指正![email protected]

猜你喜欢

转载自blog.csdn.net/baidu_38609744/article/details/82191319