「已注销」 2021-04-27 11:52 采纳率: 33.3%
浏览 214
已结题

如何解决使用mybatis的xml的foreach 多出一个逗号?

<insert id="insertExcel" parameterType="java.util.ArrayList">

	<foreach collection="list" item="item" separator=";">
		INSERT INTO CUST_INFO
		(
		<include refid="Base_Column_List" />
		)
		VALUES
		( 
		${item.custId},
		${item.custName},
		${item.custSex},
		${item.custAge}
		)
	</foreach>
            
     
</insert>

结果

INSERT INTO CUST_INFO
  (
   
   CUST_ID,
   CUST_NAME,
   CUST_SEX,
   CUST_AGE
   
   )
VALUES
  (9, 测试9, 女, 26);
INSERT INTO CUST_INFO
  (
   
   CUST_ID,
   CUST_NAME,
   CUST_SEX,
   CUST_AGE
   
   )
VALUES
  (10, 测试10, 女, 27),

  • 写回答

7条回答 默认 最新

  • 笔下天地宽 2021-04-29 15:58
    关注

    你这个写法有问题的,在mybatis里面,一个mapper里面只能执行一个SQL语句的,不管是batch insert还是直接insert。

    你这个应该是想批量插入,但是你循环的话就产生了多个insert,最终肯定是执行不成功的,应该修改遍历的部分,直接只遍历后面的values:

    <insert id="insertExcel" parameterType="java.util.ArrayList">
        INSERT INTO CUST_INFO(
        <include refid="Base_Column_List" />
        )
        VALUES
        <foreach collection="list" item="item" separator=",">
            (
            ${item.custId},
            ${item.custName},
            ${item.custSex},
            ${item.custAge}
            )
        </foreach>
    </insert>
    

    这样写。

    因为MySQL的批量插入是支持这种的  insert into basic_info(user_id) VALUES('128'),('129'),('130')。相当于是直接插入了三条。

    如果回答对你有帮助,可采纳~

    评论

报告相同问题?