MyBatisの紹介
MyBatisは、プレーンSQLクエリ、ストアドプロシージャ、高度なマッピングをサポートする優れた永続レイヤーフレームワークです。 MyBatisは、ほぼすべてのJDBCコードとパラメーターの手動設定と、結果セットの検索カプセル化を排除します。 MyBatisは、構成とオリジナルマッピング、マッピングインターフェイス、JavaのPOJO(プレーンオールドJavaオブジェクト)に、データベース内のレコードに簡単なXMLまたはアノテーションを使用できます。
1。MyBiatsforeachタグ
Foreachは主に条件の構築に使用され、SQLステートメントのコレクションを反復することができます。 foreach要素の属性には、主にアイテム、インデックス、コレクション、オープン、セパレーター、およびクローズが含まれます。アイテムは、コレクション内の各要素が繰り返されるときのエイリアスを表します。インデックスは、反復プロセス中に各反復に到達する位置を表す名前を指定します。 Openは、ステートメントから始まるものを表し、セパレーターは各反復の間でセパレーターとして使用されるシンボルを表し、クローズは終了するものを表します。 Foreachを使用する際の最も重要で最もエラーが発生しやすいものは、コレクション属性です。この属性を指定する必要がありますが、さまざまな場合、属性の値は異なります。 3つの主な状況があります。
渡されたものが単一のパラメーターであり、パラメータータイプがリストである場合、コレクション属性値はリストです
渡されたものが単一のパラメーターであり、パラメータータイプが配列である場合、コレクションのプロパティ値は配列です
複数のパラメーターが渡されている場合、それらをマップにカプセル化する必要があります
特定の使用法は次のとおりです。
<ID = "INSERT INSERTBATCH" parameterType = "list"> tstudent(name、age)に挿入<foreach collection = "iteal" item = "item" index = "open ="( "close =") "separator =" union all "> select#{item.name} as a、#{item.age}2。MyBatisExecutorType.Batch
MyBatisに組み込まれた3種類のエグゼキュータイプがあります。デフォルトは簡単です。このモードでは、各ステートメントの実行のための新しい前処理ステートメントを作成し、SQLを単一行で提出します。一方、バッチモードは、前処理されたステートメントを再利用し、バッチ内のすべての更新ステートメントを実行します。明らかに、バッチモードには独自の問題があります。たとえば、挿入操作の場合、トランザクションが提出される前に自己具体化されたIDを取得する方法はありませんが、特定の状況ではビジネス要件を満たしていません。
特定の使用法は次のとおりです。
*方法1つのスプリング+MyBatis
// sqlsession // spring@autowiredprivate sqlsessiontemplate sqlsessionTemplateから元のsqlsessionTemplateを挿入します; //バッチで新しいセッションを取得します//自動的にそれをfalseに送信します//自動送信が真である場合、最終的なサブミッシションはsqlのsqlを介して管理できません。 sqlSessionTemplate.getSqlSessionFactory()。opensession(executortype.batch、false); // get mapperfoomapper = session.getMapper.getMapper(foomapper.class); int size = 10000; try {for(int i = 0; i <size; i ++){foo foo = new new foo(); foo.setname(string.valueof(system.currenttimemillis()); foomapper.insert(foo); if(i%1000 == 0 || i == size -1){// 1000ごとに手動で送信する、session.commit()は、cack()cach cache flullow session( e){//送信されたデータをロールバックすることはできません。Session.rollback();}最後に{session.close();} spring+mybatis方法2:
一般的なマッパーSQLエイリアスと組み合わせると、パッケージ名 +クラス名を持つことをお勧めします
public void insertBatch(Map <String、Object> Parammap、list <user> list)スロー例外{//バッチで新しいセッションを取得し、自動的にfalseに送信します//自動送信の数を制御できない場合、最後の統一された提出が最後に統一された提出物を変更する可能性があります。 sqlSessionTemplate.getSqlSessionFactory()。opensession(executortype.batch、false); try {if(null!= list || list.size(int lsize = list.size(); list.get(i); user.setindate((string)parammap.get( "indate")); user.setDatadate((string)parammap.get( "datadate")); // data aTtribution time // session.insert( "com.xx.mapper.usermapper.insert"、user); // session.update( "com.xx.mapper.usermapper.updatebyprimarykeyselective"、_ entity); session.insert( "パッケージ名 +クラス名"、ユーザー); {// 1000ごとに手動で送信して、session.commit()はコミット後にロールバックできません; //オーバーフローsession.clearcache();}}}}}}}}}}}} catchを防ぐためにキャッシュをクリーニングすることはできません。上記は、編集者が紹介したMyBatisのバッチ挿入の2つの方法(効率的な挿入)です。それがあなたに役立つことを願っています。ご質問がある場合は、メッセージを残してください。編集者は時間内に返信します。 wulin.comのウェブサイトへのご支援ありがとうございます!