最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis通過BATCH批量提交的方法

 更新時(shí)間:2018年12月25日 09:45:09   作者:isea533  
今天小編就為大家分享一篇關(guān)于MyBatis通過BATCH批量提交的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧

很多人在用 MyBatis 或者 通用 Mapper 時(shí),經(jīng)常會問有沒有批量插入和批量更新的方法。

實(shí)際上許多時(shí)候沒必要用<foreach> 去實(shí)現(xiàn)特別復(fù)雜的批量操作。直接通過 MyBatis 的 BATCH 方式執(zhí)行增刪改方法即可。

下面是一個(gè)批量用法的例子:

@Autowired
private SqlSessionFactory sqlSessionFactory;
@Transactional(rollbackFor = Exception.class)
@Override
public void batchTest() {
  SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
  CountryMapper mapper = sqlSession.getMapper(CountryMapper.class);
  List<Country> countries = mapper.selectAll();
  for (int i = 0; i < countries.size(); i++) {
    Country country = countries.get(i);
    country.setCountryname(country.getCountryname() + "Test");
    mapper.updateByPrimaryKey(country);
    //每 50 條提交一次
    if((i + 1) % 50 == 0){
      sqlSession.flushStatements();
    }
  }
  sqlSession.flushStatements();
}

在上面例子中,在Service中直接注入了SqlSessionFactory,通過下面方法獲取了一個(gè)可以批量提交的SqlSession

SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);

后續(xù)通過SqlSession直接執(zhí)行方法,或者獲取的Mapper接口,都使用的批量提交方式。

上述代碼執(zhí)行過程中輸出的日志如下:

DEBUG - Creating new transaction with name [com.isea533.mybatis.service.impl.CountryServiceImpl.batchTest]: PROPAGATION_REQUIRED,ISOLATION_DEFAULT
DEBUG - Acquired Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@752c11a2] for JDBC transaction
DEBUG - Switching JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@752c11a2] to manual commit
DEBUG - JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@752c11a2] will be managed by Spring
DEBUG - ==>  Preparing: SELECT Id,countryname,countrycode FROM country
DEBUG - ==> Parameters:
DEBUG - <==      Total: 183
DEBUG - ==>  Preparing: UPDATE country SET Id = Id,countryname = ?,countrycode = ? WHERE Id = ?
DEBUG - ==> Parameters: AngolaTest(String), AO(String), 1(Integer)
DEBUG - ==> Parameters: AfghanistanTest(String), AF(String), 2(Integer)
DEBUG - ==> Parameters: AlbaniaTest(String), AL(String), 3(Integer)
==========================================
...省略中間部分參數(shù)
==========================================
DEBUG - ==> Parameters: EthiopiaTest(String), ET(String), 50(Integer)
DEBUG - ==>  Preparing: UPDATE country SET Id = Id,countryname = ?,countrycode = ? WHERE Id = ?
DEBUG - ==> Parameters: FijiTest(String), FJ(String), 51(Integer)
DEBUG - ==> Parameters: FinlandTest(String), FI(String), 52(Integer)
==========================================
...省略中間部分參數(shù)
==========================================
DEBUG - ==> Parameters: MadagascarTest(String), MG(String), 98(Integer)
DEBUG - ==> Parameters: MalawiTest(String), MW(String), 99(Integer)
DEBUG - ==> Parameters: MalaysiaTest(String), MY(String), 100(Integer)
DEBUG - ==>  Preparing: UPDATE country SET Id = Id,countryname = ?,countrycode = ? WHERE Id = ?
DEBUG - ==> Parameters: MaldivesTest(String), MV(String), 101(Integer)
DEBUG - ==> Parameters: MaliTest(String), ML(String), 102(Integer)
==========================================
...省略中間部分參數(shù)
==========================================
DEBUG - ==> Parameters: South AfricaTest(String), ZA(String), 149(Integer)
DEBUG - ==> Parameters: SpainTest(String), ES(String), 150(Integer)
DEBUG - ==>  Preparing: UPDATE country SET Id = Id,countryname = ?,countrycode = ? WHERE Id = ?
DEBUG - ==> Parameters: Sri LankaTest(String), LK(String), 151(Integer)
DEBUG - ==> Parameters: St.LuciaTest(String), LC(String), 152(Integer)
==========================================
...省略中間部分參數(shù)
==========================================
DEBUG - ==> Parameters: ZaireTest(String), ZR(String), 182(Integer)
DEBUG - ==> Parameters: ZambiaTest(String), ZM(String), 183(Integer)
==========================================
下面事務(wù)自動提交
==========================================
DEBUG - Initiating transaction commit
DEBUG - Committing JDBC transaction on Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@752c11a2]
DEBUG - Releasing JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@752c11a2] after transaction
DEBUG - Returning JDBC Connection to DataSource

注意事項(xiàng)

1. 事務(wù)

由于在 Spring 集成的情況下,事務(wù)連接由 Spring 管理(SpringManagedTransaction),所以這里不需要手動關(guān)閉 sqlSession,在這里手動提交(commit)或者回滾(rollback)也是無效的。

2. 批量提交

批量提交只能應(yīng)用于 insert, update, delete。

并且在批量提交使用時(shí),如果在操作同一SQL時(shí)中間插入了其他數(shù)據(jù)庫操作,就會讓批量提交方式變成普通的執(zhí)行方式,所以在使用批量提交時(shí),要控制好 SQL 執(zhí)行順序。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Java之String字符串在JVM中的存儲及其內(nèi)存地址的問題

    Java之String字符串在JVM中的存儲及其內(nèi)存地址的問題

    這篇文章主要介紹了Java之String字符串在JVM中的存儲及其內(nèi)存地址的問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java中forward轉(zhuǎn)發(fā)的使用

    java中forward轉(zhuǎn)發(fā)的使用

    在Java中,forward轉(zhuǎn)發(fā)是一種非常常見且重要的操作,我們將深入探討forward的概念和用法,并給出一些代碼示例來幫助讀者更好地理解,感興趣的可以了解下
    2023-11-11
  • java實(shí)現(xiàn)打印正三角的方法

    java實(shí)現(xiàn)打印正三角的方法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)打印正三角的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例

    java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例

    這篇文章主要介紹了java實(shí)現(xiàn)的新浪微博分享代碼實(shí)例,是通過新浪API獲得授權(quán),然后接受客戶端請求的數(shù)據(jù),第三方應(yīng)用發(fā)送請求消息到微博,喚起微博分享界面,非常的實(shí)用,有相同需要的小伙伴可以參考下。
    2015-03-03
  • java利用POI讀取excel文件的方法

    java利用POI讀取excel文件的方法

    這篇文章主要介紹了java利用POI讀取excel文件的方法,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-12-12
  • SpringBoot下使用MyBatis-Puls代碼生成器的方法

    SpringBoot下使用MyBatis-Puls代碼生成器的方法

    這篇文章主要介紹了SpringBoot下使用MyBatis-Puls代碼生成器的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java中IO流解析及代碼實(shí)例

    Java中IO流解析及代碼實(shí)例

    下面小編就為大家?guī)硪黄P(guān)于Java中的IO流總結(jié)(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2021-07-07
  • 構(gòu)建多模塊的Spring Boot項(xiàng)目步驟全紀(jì)錄

    構(gòu)建多模塊的Spring Boot項(xiàng)目步驟全紀(jì)錄

    這篇文章主要給大家介紹了關(guān)于如何構(gòu)建多模塊的Spring Boot項(xiàng)目的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用SpringBoot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • IDEA2022創(chuàng)建SpringBoot項(xiàng)目的圖文教程

    IDEA2022創(chuàng)建SpringBoot項(xiàng)目的圖文教程

    本文主要介紹了IDEA2022創(chuàng)建SpringBoot項(xiàng)目的圖文教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • mybatis配置文件簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    mybatis配置文件簡介_動力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了mybatis配置文件簡介的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-09-09

最新評論

朝阳市| 红河县| 遂昌县| 鸡东县| 菏泽市| 河北区| 修水县| 都兰县| 博湖县| 西昌市| 阆中市| 长乐市| 涪陵区| 馆陶县| 卫辉市| 桂东县| 潢川县| 同德县| 新邵县| 阳朔县| 营口市| 千阳县| 新巴尔虎右旗| 扶余县| 故城县| 平遥县| 太白县| 江北区| 西林县| 金塔县| 泽库县| 宁津县| 壤塘县| 新竹县| 永吉县| 竹溪县| 洛隆县| 精河县| 德江县| 宁夏| 保康县|