ホームページ  >  記事  >  php教程  >  mybatis をバッチ挿入する 2 つの方法

mybatis をバッチ挿入する 2 つの方法

高洛峰
高洛峰オリジナル
2016-11-22 15:26:421330ブラウズ

1. mybiats foreach タグ

foreach は、主に SQL ステートメント内でセットを反復するために使用されます。 foreach 要素の属性には、主に item、index、collection、open、separator、close が含まれます。 item は反復時のコレクション内の各要素の別名を表し、index は反復プロセス中の各反復の位置を表すために使用される名前を指定します。open はステートメントの開始内容を表し、separator は各反復間の時間を表します。区切り文字として使用される記号と、終了の意味。foreach を使用するときに最も重要で最もエラーが発生しやすいのは、この属性を指定する必要がありますが、状況によっては、この属性の値が次のようになります。はい、主に 3 つの状況があります:

単一のパラメーターが渡され、パラメーターの型がリストの場合、コレクション属性値はリストです

単一のパラメーターが渡され、パラメーターの型が配列である場合、コレクションの属性値は配列です

複数のパラメータが渡される場合、それらをMapにカプセル化する必要があります

具体的な使用法は次のとおりです:

<insert id="insertBatch" parameterType="List">
     INSERT INTO TStudent(name,age) <foreach collection="list" item="item" index="index" open="("close=")"separator="union all">
     SELECT #{item.name} as a, #{item.age} as b FROM DUAL </foreach></insert>

2. mybatis ExecutorType.BATCH

Mybatis組み込みExecutorType には 3 つのタイプがあります。このモードでは、各ステートメントの実行に対して新しい準備されたステートメントが作成され、単一の SQL ステートメントが送信されます。一方、バッチ モードでは、前処理されたステートメントが再利用され、すべての更新ステートメントがバッチで実行されます。明らかにバッチのパフォーマンスは向上しますが、バッチ モードには独自の問題もあります。たとえば、トランザクションが送信される前に自動インクリメントされる ID を取得する方法がありません。特定の状況での要件

具体的な使用法は次のとおりです:

*spring+mybatis のメソッド 1

//获取sqlsession//从spring注入原有的sqlSessionTemplate@Autowiredprivate SqlSessionTemplate sqlSessionTemplate;// 新获取一个模式为BATCH,自动提交为false的session// 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH,false);    //通过新的session获取mapper
    fooMapper = session.getMapper(FooMapper.class);    int size = 10000;    try{        for(int i = 0; i < size; i++) {
            Foo foo = new Foo();
            foo.setName(String.valueOf(System.currentTimeMillis()));
            fooMapper.insert(foo);            if(i % 1000 == 0 || i == size - 1) {             //手动每1000个一提交,提交后无法回滚 
            session.commit();            //清理缓存,防止溢出
            session.clearCache();
            }
        }
    } catch (Exception e) {        //没有提交的数据可以回滚
        session.rollback();
    } finally{
        session.close();
    }

spring+mybatis

メソッド 2:

一般的なマッパー SQL エイリアスと組み合わせ、できればパッケージ名 + クラス名

りー


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。