Zwei Möglichkeiten, Mybatis stapelweise einzufügen
Nov 22, 2016 pm 03:26 PM1. 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(); } }

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

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

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

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 des First-Level-Cache von MyBatis: Wie kann die Effizienz des Datenzugriffs verbessert werden?

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
