真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

使用Mybatis怎么實(shí)現(xiàn)批量更新

這篇文章將為大家詳細(xì)講解有關(guān)使用Mybatis怎么實(shí)現(xiàn)批量更新,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對相關(guān)知識(shí)有一定的了解。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),同心企業(yè)網(wǎng)站建設(shè),同心品牌網(wǎng)站建設(shè),網(wǎng)站定制,同心網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,同心網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

方式一:

 
  
    update tableName
    
      name=${item.name},
      name2=${item.name2}
    
    where id = ${item.id}
     

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

方式二:


    update tableName
    
      
        
          
            when id=#{cus.id} then #{cus.name}
          
        
      
      
        
          
            when id=#{cus.id} then #{cus.age}
          
        
      
    
    
      
        id = #{cus.id}
      
    

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

效率參考文章:https://www.jb51.net/article/155835.htm

方式三:

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

public int updateBatch(List 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á)這個(gè)數(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ù)量大的時(shí)候 ,效率明顯降低

  • 方式三 需要自己控制,自己處理,一些隱藏的問題無法發(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;
    }
  }
}

關(guān)于使用Mybatis怎么實(shí)現(xiàn)批量更新就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


本文標(biāo)題:使用Mybatis怎么實(shí)現(xiàn)批量更新
標(biāo)題URL:http://weahome.cn/article/pdisjh.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部