suchen
Heimphp教程PHP开发Zwei Möglichkeiten, Mybatis stapelweise einzufügen

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>

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();
    }

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();
        }
    }


Stellungnahme
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 KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung