Heim php教程 PHP开发 Zwei Möglichkeiten, Mybatis stapelweise einzufügen

Zwei Möglichkeiten, Mybatis stapelweise einzufügen

Nov 22, 2016 pm 03:26 PM
mybatis

1. mybiats foreach-Tag

Foreach wird hauptsächlich zum Einbau von Bedingungen verwendet. Es kann einen Satz in einer SQL-Anweisung iterieren. Zu den Attributen des foreach-Elements gehören hauptsächlich Element, Index, Sammlung, Öffnen, Trennzeichen und Schließen. item stellt beim Iterieren den Alias ​​jedes Elements in der Sammlung dar, Index gibt einen Namen an, der verwendet wird, um die Position jeder Iteration während des Iterationsprozesses darzustellen, open stellt dar, womit die Anweisung beginnt, und Separator stellt die Zeit zwischen den einzelnen Iterationen dar. Welches Symbol als Trennzeichen verwendet wird und was „close“ bedeutet, dass es endet. Das kritischste und fehleranfälligste Element bei der Verwendung von „foreach“ ist die Angabe dieses Attributs. In verschiedenen Situationen ist der Wert dieses Attributs jedoch angegeben Anders. Es gibt hauptsächlich drei Situationen:

Wenn ein einzelner Parameter übergeben wird und der Parametertyp eine Liste ist, ist der Sammlungsattributwert Liste

Wenn ein einzelner Parameter übergeben wird und Wenn der Parametertyp ein Array-Array ist, ist der Attributwert der Sammlung ein Array

Wenn mehrere Parameter übergeben werden, müssen wir sie in eine Karte kapseln

Spezifische Verwendung Wie folgt:

<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>
Nach dem Login kopieren

2. mybatis ExecutorType.BATCH

Mybatis verfügt über drei integrierte ExecutorTypes. In diesem Modus wird für die Ausführung jeder Anweisung ein neuer erstellt. Bereiten Sie eine Anweisung vor und senden Sie eine einzelne SQL-Anweisung. Während der Batch-Modus die vorverarbeiteten Anweisungen wiederverwendet und alle Aktualisierungsanweisungen stapelweise ausführt, ist die Batch-Leistung natürlich besser, aber der Batch-Modus hat auch seine eigenen Probleme, beispielsweise während des Einfügevorgangs , wenn die Transaktion nicht erfolgt Vor der Übermittlung gibt es keine Möglichkeit, die automatisch inkrementierte ID zu erhalten, die in bestimmten Situationen nicht den Geschäftsanforderungen entspricht

Die spezifische Verwendung ist wie folgt:

* Methode 1 von Spring Mybatis

//获取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();
    }
Nach dem Login kopieren

Spring Mybatis

Methode 2:

In Kombination mit dem allgemeinen Mapper-SQL-Alias ​​ist es am besten, den Paketnamen + den Klassennamen zu verwenden

public void insertBatch(Map<String,Object> paramMap, List<User> list) throws Exception {        // 新获取一个模式为BATCH,自动提交为false的session
        // 如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
        SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false);        try {            if(null != list || list.size()>0){                int  lsize=list.size();                for (int i = 0, n=list.size(); i < n; i++) {
                    User user= list.get(i);
                    user.setIndate((String)paramMap.get("indate"));
                    user.setDatadate((String)paramMap.get("dataDate"));//数据归属时间
                //session.insert("com.xx.mapper.UserMapper.insert",user);
  //session.update("com.xx.mapper.UserMapper.updateByPrimaryKeySelective",_entity);
                                        session.insert(“包名+类名", user);
                    if ((i>0 && i % 1000 == 0) || i == lsize - 1) {
                        // 手动每1000个一提交,提交后无法回滚
                        session.commit();
                        // 清理缓存,防止溢出
                        session.clearCache();
                    }
                }
            }
        } catch (Exception e) {
            // 没有提交的数据可以回滚
            session.rollback();
            e.printStackTrace();
        } finally {
            session.close();
        }
    }
Nach dem Login kopieren


Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße Artikel -Tags

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

iBatis vs. MyBatis: Welches ist besser für Sie? iBatis vs. MyBatis: Welches ist besser für Sie? Feb 19, 2024 pm 04:38 PM

iBatis vs. MyBatis: Welches ist besser für Sie?

Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis Feb 26, 2024 pm 07:48 PM

Ausführliche Erläuterung der Funktion „Tag festlegen' in den dynamischen SQL-Tags von MyBatis

Verschiedene Möglichkeiten, Batch-Löschvorgänge in MyBatis zu implementieren Verschiedene Möglichkeiten, Batch-Löschvorgänge in MyBatis zu implementieren Feb 19, 2024 pm 07:31 PM

Verschiedene Möglichkeiten, Batch-Löschvorgänge in MyBatis zu implementieren

Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis Feb 19, 2024 pm 05:43 PM

Vergleichende Analyse der Funktionen und Leistung von JPA und MyBatis

Ausführliche Erklärung zur Verwendung von MyBatis-Batch-Löschanweisungen Ausführliche Erklärung zur Verwendung von MyBatis-Batch-Löschanweisungen Feb 20, 2024 am 08:31 AM

Ausführliche Erklärung zur Verwendung von MyBatis-Batch-Löschanweisungen

Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden? Feb 23, 2024 pm 08:13 PM

Ausführliche Erklärung des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden?

Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter Feb 23, 2024 am 09:51 AM

Interpretation und Best Practices der MyBatis Generator-Konfigurationsparameter

Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene Feb 25, 2024 pm 12:30 PM

Analysieren Sie den Caching-Mechanismus von MyBatis: Vergleichen Sie die Eigenschaften und die Verwendung des Caches der ersten Ebene und des Caches der zweiten Ebene

See all articles