如何解决使用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),

你这个写法有问题的,在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')。相当于是直接插入了三条。

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

( 
		${item.custId},
		${item.custName},
		${item.custSex},
		${item.custAge}
		)

循环values中的插入值,将separator改成逗号,例如

<insert id="insertBatch">
    INSERT INTO t_user
            (id, name, del_flag)
    VALUES
    <foreach collection ="list" item="user" separator =",">
         (#{user.id}, #{user.name}, #{user.delFlag})
    </foreach >
</insert>

 

你的sql少了个)对应from后面的 (

循环错地了,应该循环values里面的值,而不是整条语句

你稍微格式化一下就看出来了,少了括号)

 

 

这个select中,咋能吧入参当成查询对象啊,查询对象都是数据库字段,你直接查询入参啥意思啊,(难道是直接向查询constant?)入参只能作为条件的,查询的是数据库的column。入参一般是做条件判断的。你可以现在Navicat里面写好SQL在往mapper中修改。 批量插入就是这样的,后面的select如果比较麻烦,你可以先写出来,试试看

INSERT INTO basic_info(code) SELECT code FROM employee where id >100;

前面是插入部分,后面直接查询就行,当然字段要对上,注意查询的时候修改别名,插入的话应该没啥问题的

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

给你个建议,如果入参多,查询的话一般是用在where 后面用in,然后遍历。