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

6 篇文章 0 订阅
5 篇文章 0 订阅

问题描述:


想生成一年内除节假日外,每一天对应某个实验室的某个时间段的记录表,也就是三个字段,日期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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值