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文は、次のように等価です.
二、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が「,」分割に設定され、
2、oracle
separatorは「union all」分割に設定、パラメータはselect...を使用する.from dual
mybatisのforeachは主にin条件の構築に用いられ、SQL文で1つのセットを反復することができます.
foreachラベルのプロパティは主にitem,index,collection,open,separator,closeです.
itemはセット内の各要素が反復するときの別名を表し、indexは反復中に反復するたびに反復する位置を表す名前を指定し、openは文がどのように始まるかを表し、separatorは反復するたびにどのような記号を区切りとして、closeはどのように終わるかを表します.foreachを使用する場合、最も重要なのはcollectionプロパティです.このプロパティは指定する必要がありますが、場合によっては値が異なります.主に3つのケースがあります.
一括挿入を使用して実行されるSQL文は、次のように等価です.
insert into redeem_code (batch_id, code, type, facevalue,create_user,create_time)
values
(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? ),(?,?,?,?,?,? )
二、oracleとmysqlでforeachを使う違い
Mybatisがforeachを使って一括挿入する場合、データベースによって書き方が異なり、mysqlの書き方に慣れている多くの学生は、ライブラリをoracleに交換するときにこれらの穴を踏むことがあります.
主な違いはforeachラベル内のseparatorプロパティの設定の問題です.
コードは次のとおりです.
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 )