美文网首页
Mybatis的批量操作-ADD 两种不同注意

Mybatis的批量操作-ADD 两种不同注意

作者: Spring_java | 来源:发表于2018-09-08 15:52 被阅读0次

    1:批量更新

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

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

    <insert id="batchAddPerson" parameterType="com.mybatis.batch.pojo.Person">
            <foreach collection="persons" item="person" index="index"
                separator=";">
                 insert into person (name,age,sex)  
                 VALUES
                    (
                    #{person.name},#{person.age},#{person.sex}
                    )
            </foreach>
        </insert>
    

    结果:

    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语句执行,将出现如下问题:

      1. mapper接口的add方法返回值将是最一条INSERT语句的操作成功的记录数目(就是0或1),
        而不是所有INSERT语句的操作成功的总记录数目 这里是1
      1. 当其中一条不成功时,不会进行整体回滚。
    • 3:还有一点很重要 separator=";"这个里面是分号。相当于变成了2条SQL在执行了。这点可以从上面的
      insert into person (name,age,sex) VALUES ( ?,?,? ) ;
      insert into person (name,age,sex) VALUES ( ?,?,? ) 看出来,是2个SQL.

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

    <insert id="batchAddPerson" parameterType="com.mybatis.batch.pojo.Person">
           insert into person (name,age,sex)    
             VALUES
            <foreach collection="persons" item="person" index="index"
                separator=",">
                (
                #{person.name},#{person.age},#{person.sex}
                )
            </foreach>
        </insert> 
    

    这个是把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="," 现在变成了逗号了

    相关文章

      网友评论

          本文标题:Mybatis的批量操作-ADD 两种不同注意

          本文链接:https://www.haomeiwen.com/subject/ohtlgftx.html