Oracle+Mybatis-Plus 的批量插入


Oracle的批量處理和MySQL不一樣,記錄踩過的坑。

1 首先是Mybatis-Plus自帶的批量插入:

saveBatch方法: 它的SQL 如圖所示:

 2 是利用存儲過程實現批量插入的形式

Mapper 方法:
 int insertBatch(List<TabUser> list);

XML:
 <insert id="insertBatch" parameterType="java.util.List" >
        begin
        <foreach collection="list" item="item" index="index">
            insert into tab_user
            (
           id, name,age,email
            )
            values(
            #{item.id,jdbcType=DECIMAL},
            #{item.name,jdbcType=VARCHAR},
#{item.age,jdbcType=DECIMAL},
#{item.email,jdbcType=VARCHAR} );
</foreach> end; </insert>

SQL語句是拼接起來的:

 相當於如下形式: 

 3  第三種方式:利用<foreach>標簽,將入參的list集合通過UNION ALL生成虛擬數據,從而實現批量插入(

Mapper: 
  int insertByForeach(List<TabUser> list);
XML:
<insert id="insertByForeach"> insert into tab_user ( id,name,age,email) select A.* from ( <foreach collection="list" item="item" index="index" separator="UNION ALL"> select #{item.id,jdbcType=DECIMAL}, #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=DECIMAL},#{item.email,jdbcType=VARCHAR} from dual </foreach> ) A </insert>

SQL語句是union all 拼接起來的: 

運行結果:

 相當於如下形式: 

 

 4 使用特殊的sql語句 形式如下:

Mapper:
int insertOneSql(List<TabUser> list);
XML:

 <insert id="insertOneSql">
        insert all
        <foreach collection="list" item="item" index="index">
            into tab_user(id,name,age,email) 
            values(
            #{item.id,jdbcType=DECIMAL}, #{item.name,jdbcType=VARCHAR},
            #{item.age,jdbcType=DECIMAL},#{item.email,jdbcType=VARCHAR}
            )
        </foreach>
        select 1 from dual
    </insert>

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM