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

Mybatis批量更新三種方式的實現(xiàn)

 更新時間:2019年02月01日 15:03:30   作者:僵尸吃過跳跳糖  
這篇文章主要介紹了Mybatis批量更新三種方式的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Mybatis實現(xiàn)批量更新操作

方式一:

<update id="updateBatch" parameterType="java.util.List"> 
  <foreach collection="list" item="item" index="index" open="" close="" separator=";">
    update tableName
    <set>
      name=${item.name},
      name2=${item.name2}
    </set>
    where id = ${item.id}
  </foreach>   
</update>

但Mybatis映射文件中的sql語句默認(rèn)是不支持以" ; " 結(jié)尾的,也就是不支持多條sql語句的執(zhí)行。所以需要在連接mysql的url上加 &allowMultiQueries=true 這個才可以執(zhí)行。

方式二:

<update id="updateBatch" parameterType="java.util.List">
    update tableName
    <trim prefix="set" suffixOverrides=",">
      <trim prefix="c_name =case" suffix="end,">
        <foreach collection="list" item="cus">
          <if test="cus.name!=null">
            when id=#{cus.id} then #{cus.name}
          </if>
        </foreach>
      </trim>
      <trim prefix="c_age =case" suffix="end,">
        <foreach collection="list" item="cus">
          <if test="cus.age!=null">
            when id=#{cus.id} then #{cus.age}
          </if>
        </foreach>
      </trim>
    </trim>
    <where>
      <foreach collection="list" separator="or" item="cus">
        id = #{cus.id}
      </foreach>
    </where>
</update>

這種方式貌似效率不高,但是可以實現(xiàn),而且不用改動mysql連接

效率參考文章:http://m.fzitv.net/article/155835.htm

方式三:

臨時改表sqlSessionFactory的屬性,實現(xiàn)批量提交的java,但無法返回受影響數(shù)量。

public int updateBatch(List<Object> list){
    if(list ==null || list.size() <= 0){
      return -1;
    }
    SqlSessionFactory sqlSessionFactory = SpringContextUtil.getBean("sqlSessionFactory");
    SqlSession sqlSession = null;
    try {
      sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH,false);
      Mapper mapper = sqlSession.getMapper(Mapper.class);
      int batchCount = 1000;//提交數(shù)量,到達(dá)這個數(shù)量就提交
      for (int index = 0; index < list.size(); index++) {
        Object obj = list.get(index);
        mapper.updateInfo(obj);
        if(index != 0 && index%batchCount == 0){
          sqlSession.commit();
        }          
      }
      sqlSession.commit();
      return 0;
    }catch (Exception e){
      sqlSession.rollback();
      return -2;
    }finally {
      if(sqlSession != null){
        sqlSession.close();
      }
    }
    
}

其中 SpringContextUtil 是自己定義的工具類 用來獲取spring加載的bean對象,其中g(shù)etBean() 獲得的是想要得到的sqlSessionFactory。Mapper 是自己的更具業(yè)務(wù)需求的Mapper接口類,Object是對象。

總結(jié)

  • 方式一 需要修改mysql的連接url,讓全局支持多sql執(zhí)行,不太安全
  • 方式二 當(dāng)數(shù)據(jù)量大的時候 ,效率明顯降低
  • 方式三 需要自己控制,自己處理,一些隱藏的問題無法發(fā)現(xiàn)。

附件:SpringContextUtil.java

@Component
public class SpringContextUtil implements ApplicationContextAware{

  private static ApplicationContext applicationContext;

  @Override
  public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
    SpringContextUtil.applicationContext = applicationContext;
  }

  public static ApplicationContext getApplicationContext(){
    return applicationContext;
  }

  public static Object getBean(Class T){
    try {
      return applicationContext.getBean(T);
    }catch (BeansException e){
      return null;
    }
  }

  public static Object getBean(String name){
    try {
      return applicationContext.getBean(name);
    }catch (BeansException e){
      return null;
    }
  }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java數(shù)據(jù)庫連接池的幾種配置方法(以MySQL數(shù)據(jù)庫為例)

    Java數(shù)據(jù)庫連接池的幾種配置方法(以MySQL數(shù)據(jù)庫為例)

    這篇文章主要介紹了Java數(shù)據(jù)庫連接池的幾種配置方法(以MySQL數(shù)據(jù)庫為例) 的相關(guān)資料,需要的朋友可以參考下
    2016-07-07
  • Java如何通過反射方式生成數(shù)據(jù)庫實體類

    Java如何通過反射方式生成數(shù)據(jù)庫實體類

    這篇文章主要介紹了Java如何通過反射方式生成數(shù)據(jù)庫實體類問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot整合ActiveMQ過程解析

    SpringBoot整合ActiveMQ過程解析

    這篇文章主要介紹了SpringBoot整合ActiveMQ過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • 如何從Java接口的角度切入靜態(tài)工廠模式

    如何從Java接口的角度切入靜態(tài)工廠模式

    靜態(tài)工廠模式是一種改進的獲取實例的方法。通常我們會使用new關(guān)鍵字調(diào)用類的構(gòu)造方法來創(chuàng)建一個對象。靜態(tài)工廠可以根據(jù)用戶傳入的參數(shù)來動態(tài)地實例化對象,避免一次性實例化所有對象所帶來的性能浪費,同時也降低了耦合性。
    2021-06-06
  • Java實現(xiàn)常用緩存淘汰算法:FIFO、LRU、LFU

    Java實現(xiàn)常用緩存淘汰算法:FIFO、LRU、LFU

    在高并發(fā)、高性能的質(zhì)量要求不斷提高時,我們首先會想到的就是利用緩存予以應(yīng)對。而常用的幾個緩存淘汰算法有:FIFO、LRU和LFU,本文將為大家詳細(xì)介紹一下這三個算法并用java實現(xiàn),感興趣的可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • spring-boot 多線程并發(fā)定時任務(wù)的解決方案

    spring-boot 多線程并發(fā)定時任務(wù)的解決方案

    這篇文章主要介紹了spring-boot 多線程并發(fā)定時任務(wù)的解決方案,需要的朋友可以參考下
    2019-08-08
  • 詳解Java中NullPointerException異常的原因和解決辦法

    詳解Java中NullPointerException異常的原因和解決辦法

    本文主要介紹了詳解Java中NullPointerException異常的原因和解決辦法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • mybatis/mybatis-plus模糊查詢語句特殊字符轉(zhuǎn)義攔截器的實現(xiàn)

    mybatis/mybatis-plus模糊查詢語句特殊字符轉(zhuǎn)義攔截器的實現(xiàn)

    在開發(fā)中,我們通常會遇到這樣的情況。用戶在錄入信息是錄入了‘%’,而在查詢時無法精確匹配‘%’。究其原因,‘%’是MySQL的關(guān)鍵字,如果我們想要精確匹配‘%’,那么需要對其進行轉(zhuǎn)義,本文就詳細(xì)的介紹一下
    2021-11-11
  • spring接口通過配置支持返回多種格式(xml,json,html,excel)

    spring接口通過配置支持返回多種格式(xml,json,html,excel)

    這篇文章主要給大家介紹了關(guān)于spring接口如何通過配置支持返回多種格式(xml,json,html,excel)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Java數(shù)組傳遞及可變參數(shù)操作實例詳解

    Java數(shù)組傳遞及可變參數(shù)操作實例詳解

    這篇文章主要介紹了Java數(shù)組傳遞及可變參數(shù)操作,結(jié)合實例形式詳細(xì)分析了java數(shù)組參數(shù)傳遞與可變參數(shù)相關(guān)使用技巧,需要的朋友可以參考下
    2019-09-09

最新評論

临猗县| 洪湖市| 洪江市| 彭山县| 化隆| 时尚| 杂多县| 霍林郭勒市| 波密县| 东光县| 吉木萨尔县| 分宜县| 成安县| 洱源县| 河西区| 喀喇| 巴东县| 普兰店市| 化德县| 兴海县| 革吉县| 威海市| 孟村| 丰宁| 沈丘县| 巴林右旗| 兴海县| 清流县| 卢湾区| 攀枝花市| 林口县| 广安市| 台南市| 乐山市| 鞍山市| 醴陵市| 白沙| 无锡市| 阳江市| 吕梁市| 建德市|