Mybatis foreachを使用して一括挿入する場合、oracleとmysqlの違い

2112 ワード

一、mybatis foreachラベルについて
mybatisのforeachは主にin条件の構築に用いられ、SQL文で1つのセットを反復することができます.
foreachラベルのプロパティは主にitem,index,collection,open,separator,closeです.
itemはセット内の各要素が反復するときの別名を表し、indexは反復中に反復するたびに反復する位置を表す名前を指定し、openは文がどのように始まるかを表し、separatorは反復するたびにどのような記号を区切りとして、closeはどのように終わるかを表します.foreachを使用する場合、最も重要なのはcollectionプロパティです.このプロパティは指定する必要がありますが、場合によっては値が異なります.主に3つのケースがあります.
  • 単一パラメータでパラメータタイプがリストである場合collection属性値はlist
  • である.
  • 単一パラメータでパラメータタイプがarray配列である場合、collectionの属性値はarray
  • である.
  • 入力パラメータが複数である場合、私たちはそれらを1つのMapにカプセル化する必要があります.もちろん、単一のパラメータもmap
  • にカプセル化することができます.
    一括挿入を使用して実行されるSQL文は、次のように等価です.
     insert into redeem_code (batch_id, code, type, facevalue,create_user,create_time)
     values
     (?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? )

    二、oracleとmysqlでforeachを使う違い
    Mybatisがforeachを使って一括挿入する場合、データベースによって書き方が異なり、mysqlの書き方に慣れている多くの学生は、ライブラリをoracleに交換するときにこれらの穴を踏むことがあります.
    主な違いはforeachラベル内のseparatorプロパティの設定の問題です.
  • mysql:separatorが「,」に設定されて分割された場合、最終的な接合のコード形式は:insert into table_name (a,b,c) values (v1,v2,v3) ,(v4,v5,v6) ,...
  • oracle:separatorが「union all」分割に設定されている場合、最終的な接合のコード形式は:insert into table_name (a,b,c) values (v1,v2,v3) union all (v4,v5,v6) union all...

  • コードは次のとおりです.
    1、mysql
    separatorが「,」分割に設定され、
    
        insert into table_name (name, adress, age)
            values
            
                (   #{item.name},  #{item.adress},  #{item.age}  )
            
    

    2、oracle
    separatorは「union all」分割に設定、パラメータはselect...を使用する.from dual
    
        insert into table_name (name, adress, age)
            values
            
                (select #{item.name}, 
                        #{item.adress}, 
                        #{item.age} 
                    from dual   )