<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,然后遍历。