mybatis 带分号批量sql_Mybatis的批量操作-ADD 两种不同注意

本文探讨了两种批量插入SQL的实现方式。第一种是在Foreach内部进行插入,导致每条数据作为独立的INSERT语句执行,影响行数可能不准确且不支持整体回滚。第二种方法是通过逗号分隔值,将多条数据拼接成一个VALUES子句,形成一个完整的批量INSERT语句,返回影响行数正确并支持整体操作。这种方式更高效且适合大数据量插入。
摘要由CSDN通过智能技术生成

1:批量更新

批量插入有2种不同的SQL写法

1:直接在Foreach里面进行插入

separator=";">

insert into person (name,age,sex)

VALUES

(

#{person.name},#{person.age},#{person.sex}

)

结果:

Preparing: insert into person (name,age,sex) VALUES ( ?,?,? ) ; insert into person (name,age,sex) VALUES ( ?,?,? )

: ==> Parameters: 李5(String), 12(Integer), 1(Integer), 张4(String), 12(Integer), 1(Integer)

: <== Updates: 1

可以看到,最终的执行结果返回的数据库影响行数是1.但是数据还是插入了2条

说明:

上述方式相当语句逐条INSERT语句执行,将出现如下问题:

mapper接口的add方法返回值将是最一条INSERT语句的操作成功的记录数目(就是0或1),

而不是所有INSERT语句的操作成功的总记录数目 这里是1

当其中一条不成功时,不会进行整体回滚。

3:还有一点很重要 separator=";"这个里面是分号。相当于变成了2条SQL在执行了。这点可以从上面的

insert into person (name,age,sex) VALUES ( ?,?,? ) ;

insert into person (name,age,sex) VALUES ( ?,?,? ) 看出来,是2个SQL.

2:第二种批量插入的方法

insert into person (name,age,sex)

VALUES

separator=",">

(

#{person.name},#{person.age},#{person.sex}

)

这个是把insert into 放在最外层操作了,注意,这个separator="," 现在变成了逗号了。

最终结果:

Preparing: insert into person (name,age,sex) VALUES ( ?,?,? ) , ( ?,?,? )

: ==> Parameters: 李5(String), 12(Integer), 1(Integer), 张4(String), 12(Integer), 1(Integer)

: <== Updates: 2

1:拼接的SQL语句变成了 VALUES ( ?,?,? ) , ( ?,?,? ) 而不是两个单独的SQL语句了,

2:最后返回的 结果是2

3 :这个separator="," 现在变成了逗号了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值