mybatis insert 插入多条数据

本文介绍了在MyBatis中如何正确实现批量插入数据。通过使用`@Param`注解和`foreach`标签,详细讲解了在SQL语句中如何避免因未正确分隔值导致的字段不匹配错误,确保批量插入的正确性。

普通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的的括号

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值