Rumah php教程 PHP开发 mybatis 批量插入的两种方式

mybatis 批量插入的两种方式

Nov 22, 2016 pm 03:26 PM
mybatis

一、mybiats foreach标签

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

如果传入的参数是多个的时候,我们就需要把它们封装成一个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>
Salin selepas log masuk

二、mybatis ExecutorType.BATCH

Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优; 但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的

具体用法如下:

*方式一 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();
    }
Salin selepas log masuk

spring+mybatis

方法二:

结合通用mapper sql别名最好是包名+类名

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();
        }
    }
Salin selepas log masuk


Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1654
14
Tutorial PHP
1252
29
Tutorial C#
1225
24
iBatis vs. MyBatis: Mana satu yang lebih baik untuk anda? iBatis vs. MyBatis: Mana satu yang lebih baik untuk anda? Feb 19, 2024 pm 04:38 PM

iBatis vs. MyBatis: Mana yang patut anda pilih? Pengenalan: Dengan perkembangan pesat bahasa Java, banyak rangka kerja kegigihan telah muncul. iBatis dan MyBatis ialah dua rangka kerja kegigihan yang popular, kedua-duanya menyediakan penyelesaian capaian data yang mudah dan cekap. Artikel ini akan memperkenalkan ciri dan kelebihan iBatis dan MyBatis, dan memberikan beberapa contoh kod khusus untuk membantu anda memilih rangka kerja yang sesuai. Pengenalan kepada iBatis: iBatis ialah rangka kerja kegigihan sumber terbuka

Analisis perbandingan fungsi dan prestasi JPA dan MyBatis Analisis perbandingan fungsi dan prestasi JPA dan MyBatis Feb 19, 2024 pm 05:43 PM

JPA dan MyBatis: Analisis Perbandingan Fungsi dan Prestasi Pengenalan: Dalam pembangunan Java, rangka kerja kegigihan memainkan peranan yang sangat penting. Rangka kerja kegigihan biasa termasuk JPA (JavaPersistenceAPI) dan MyBatis. Artikel ini akan menjalankan analisis perbandingan fungsi dan prestasi kedua-dua rangka kerja dan menyediakan contoh kod khusus. 1. Perbandingan fungsi: JPA: JPA ialah sebahagian daripada JavaEE dan menyediakan penyelesaian kegigihan data berorientasikan objek. Ia diluluskan anotasi atau X

Penjelasan terperinci tentang fungsi Set tag dalam teg SQL dinamik MyBatis Penjelasan terperinci tentang fungsi Set tag dalam teg SQL dinamik MyBatis Feb 26, 2024 pm 07:48 PM

Tafsiran teg SQL dinamik MyBatis: Penjelasan terperinci tentang penggunaan teg Set MyBatis ialah rangka kerja lapisan kegigihan yang sangat baik Ia menyediakan banyak teg SQL dinamik dan boleh membina pernyataan operasi pangkalan data secara fleksibel. Antaranya, tag Set ialah tag yang digunakan untuk menjana klausa SET dalam kenyataan UPDATE, yang sangat biasa digunakan dalam operasi kemas kini. Artikel ini akan menerangkan secara terperinci penggunaan teg Set dalam MyBatis dan menunjukkan kefungsiannya melalui contoh kod tertentu. Apakah itu Set tag Set tag digunakan dalam MyBati

Pelbagai cara untuk melaksanakan operasi pemadaman kelompok dalam MyBatis Pelbagai cara untuk melaksanakan operasi pemadaman kelompok dalam MyBatis Feb 19, 2024 pm 07:31 PM

Beberapa cara untuk melaksanakan pernyataan pemadaman kelompok dalam MyBatis memerlukan contoh kod khusus Dalam beberapa tahun kebelakangan ini, disebabkan oleh peningkatan jumlah data, operasi kelompok telah menjadi bahagian penting dalam operasi pangkalan data. Dalam pembangunan sebenar, kita selalunya perlu memadamkan rekod dalam pangkalan data secara berkelompok. Artikel ini akan menumpukan pada beberapa cara untuk melaksanakan pernyataan padam kelompok dalam MyBatis dan memberikan contoh kod yang sepadan. Gunakan teg foreach untuk melaksanakan pemadaman kelompok MyBatis menyediakan teg foreach, yang boleh melintasi set dengan mudah.

Penjelasan terperinci tentang cara menggunakan penyata pemadaman kumpulan MyBatis Penjelasan terperinci tentang cara menggunakan penyata pemadaman kumpulan MyBatis Feb 20, 2024 am 08:31 AM

Penjelasan terperinci tentang cara menggunakan pernyataan pemadaman kumpulan MyBatis memerlukan contoh kod khusus Pengenalan: MyBatis ialah rangka kerja lapisan kegigihan yang sangat baik yang menyediakan fungsi operasi SQL yang kaya. Dalam pembangunan projek sebenar, kami sering menghadapi situasi di mana data perlu dipadamkan dalam kelompok. Artikel ini akan memperkenalkan secara terperinci cara menggunakan pernyataan pemadaman kumpulan MyBatis, dan melampirkan contoh kod tertentu. Senario penggunaan: Apabila memadamkan sejumlah besar data dalam pangkalan data, adalah tidak cekap untuk melaksanakan kenyataan padam satu demi satu. Pada ketika ini, anda boleh menggunakan fungsi pemadaman kelompok MyBatis

Penjelasan terperinci tentang mekanisme cache MyBatis: fahami prinsip penyimpanan cache dalam satu artikel Penjelasan terperinci tentang mekanisme cache MyBatis: fahami prinsip penyimpanan cache dalam satu artikel Feb 23, 2024 pm 04:09 PM

Penjelasan terperinci tentang mekanisme caching MyBatis: Baca prinsip storan cache dalam satu artikel Pengenalan Apabila menggunakan MyBatis untuk capaian pangkalan data, caching ialah mekanisme yang sangat penting, yang boleh mengurangkan capaian kepada pangkalan data dan meningkatkan prestasi sistem dengan berkesan. Artikel ini akan memperkenalkan mekanisme caching MyBatis secara terperinci, termasuk klasifikasi cache, prinsip penyimpanan dan contoh kod khusus. 1. Klasifikasi cache Cache MyBatis terbahagi kepada dua jenis: cache peringkat pertama dan cache peringkat kedua. Cache peringkat pertama ialah cache peringkat SqlSession

Penjelasan terperinci tentang cache peringkat pertama MyBatis: Bagaimana untuk meningkatkan kecekapan capaian data? Penjelasan terperinci tentang cache peringkat pertama MyBatis: Bagaimana untuk meningkatkan kecekapan capaian data? Feb 23, 2024 pm 08:13 PM

Penjelasan terperinci tentang cache peringkat pertama MyBatis: Bagaimana untuk meningkatkan kecekapan capaian data? Semasa proses pembangunan, capaian data yang cekap sentiasa menjadi salah satu fokus pengaturcara. Untuk rangka kerja lapisan kegigihan seperti MyBatis, caching ialah salah satu kaedah utama untuk meningkatkan kecekapan capaian data. MyBatis menyediakan dua mekanisme caching: cache peringkat pertama dan cache peringkat kedua. Cache peringkat pertama didayakan secara lalai. Artikel ini akan memperkenalkan mekanisme cache peringkat pertama MyBatis secara terperinci dan menyediakan contoh kod khusus untuk membantu pembaca memahami dengan lebih baik.

Perbandingan persamaan dan perbezaan antara iBatis dan MyBatis: perbandingan rangka kerja ORM arus perdana Perbandingan persamaan dan perbezaan antara iBatis dan MyBatis: perbandingan rangka kerja ORM arus perdana Feb 19, 2024 pm 07:08 PM

iBatis dan MyBatis ialah dua rangka kerja ORM (Object-Relational Mapping) arus perdana Mereka mempunyai banyak persamaan dalam reka bentuk dan penggunaan, tetapi juga mempunyai beberapa perbezaan yang ketara. Artikel ini akan membandingkan persamaan dan perbezaan antara iBatis dan MyBatis secara terperinci, dan menggambarkan ciri-ciri mereka melalui contoh kod tertentu. 1. Sejarah dan latar belakang iBatis dan MyBatis iBatis ialah Apache Software Foundat

See all articles