mybatis insert 插入多条数据

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_20009015/article/details/85041590

普通sql中insert插入多条
insert into 表名(字段名1,字段名2)values(值a1,值b1), (值a2,值b2),
例如:
insert into user_info (user_account,user_name,user_age,user_class) values (‘00001’, '张三 ',‘20’,‘计算机系’), (‘00002’, ‘李四’,‘19’,‘计算机系’);

在values中用括号分隔开多条即可

因此在mybatis中 也是用foreach拼出来这种

在mapper.java中 接口
int insertBatch(@Param(“capitalDetailDOList”) List capitalDetailDOList);

要注意这个注解param 必须是
import org.apache.ibatis.annotations.Param;

不然无法找到该参数
然后把foreach里面的值设置为parm里面的命名

<insert id="insertBatch" parameterType="java.util.List">
    INSERT INTO  t_capital_detail
    (batch_no, organize_id, organize_name,
   )VALUES
    <foreach collection="capitalDetailDOList" index="index" item="capitalDetailDO" open="(" separator="," close=")">
        #{capitalDetailDO.batchNo,jdbcType=VARCHAR}, #{capitalDetailDO.organizeId,jdbcType=BIGINT}, #{capitalDetailDO.organizeName,jdbcType=VARCHAR},
    </foreach>

但是如上的xml写法是错的,在list里面是一条的时候没有问题,但是如果多条的时候,拼成的sql就成了
INSERT INTO t_capital_detail (batch_no, organize_id, organize_name)VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, … )

因为foreach里面没有合理的分隔开各个项的值。这样会报字段不匹配的错误

正确的写法应该是

<insert id="insertBatch" parameterType="java.util.List">
    INSERT INTO  t_capital_detail
    (  
    batch_no, organize_id, organize_name  
    )VALUES  
    <foreach collection="capitalDetailDOList" index="index" item="capitalDetailDO" separator=","  >
(
        #{capitalDetailDO.batchNo,jdbcType=VARCHAR}, #{capitalDetailDO.organizeId,jdbcType=BIGINT}, #{capitalDetailDO.organizeName,jdbcType=VARCHAR},
)
    </foreach>

把括号放在里面,且去掉foreach里面的open 和close的的括号

展开阅读全文

没有更多推荐了,返回首页