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

解決sharding JDBC 不支持批量導(dǎo)入問題

 更新時(shí)間:2021年10月29日 14:52:42   作者:我&菜鳥  
這篇文章主要介紹了解決sharding JDBC 不支持批量導(dǎo)入問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

sharding JDBC 不支持批量導(dǎo)入

package com.ydmes.service.impl.log;
import com.ydmes.domain.entity.log.BarTraceBackLog;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import java.util.List;
@Component
public class BarTraceBackLogBatchServiceImpl implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void batchInsertBarTraceBackLogs(List<BarTraceBackLog> barTraceBackLogs) {
DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
DataSourceTransactionManager transactionManager = (DataSourceTransactionManager)
applicationContext.getBean("shardingTransactitonManager");
TransactionStatus transactionStatus = transactionManager.getTransaction(definition);
for (BarTraceBackLog barTraceBackLog : barTraceBackLogs) {
//UserDao有create方法,單條插入
applicationContext.getBean(BarTraceBackLogServiceImpl.class).insertSelective(barTraceBackLog);
}
transactionManager.commit(transactionStatus);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}

sharding-jdbc不支持多條sql語句批量更新

今天項(xiàng)目有個(gè)刷數(shù)據(jù)的需求,單條數(shù)據(jù)修改太慢,想著寫個(gè)批量update,三兩下把sql寫好了,發(fā)現(xiàn)分表不支持,sharding-jdbc只會(huì)把我第一個(gè)表名填充成正確表名,后面的表名都沒有修改。

mybastis如下:

<update id="batchUpdate" >
<foreach collection="userList" item="item" index="index" separator=";">
update t_user_data set `province_id`=#{item.provinceId} where member_id = #{item.memberId}
</foreach>
</update>

sql如下:

update t_user_data_1 set `province_id`=?,`region_id`=? where member_id = ? ;
update t_user_data set `province_id`=?,`region_id`=? where member_id = ? ;

由此可見,這多條sql語句更新是不支持的。

修改思路

既然表名不支持自動(dòng)多個(gè),那我就自己替換表名,

先在代碼中根據(jù)表的分表規(guī)則得到表名,在賦值在每個(gè)sql語句上

代碼如下:

userData1.setTableName("t_user_data_" + userData.getMemberId() % 8);

比如我這張表分了八個(gè)表,則按8取余這樣每個(gè)條數(shù)據(jù)都對(duì)應(yīng)好了表名,

mybastis如下:

<update id="batchUpdate" >
<foreach collection="userList" item="item" index="index" separator=";">
update ${item.tableName} set `province_id`=#{item.provinceId} where member_id = #{item.memberId}
</foreach>
</update>

這里需要注意一下:表名和列名需要用${}來傳入,參數(shù)才用#{}。

最終sql如下:

update t_user_data_1 set `province_id`=?,`region_id`=? where member_id = ? ;
update t_user_data_2 set `province_id`=?,`region_id`=? where member_id = ? ;

這樣便解決了批量更新問題。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringSecurity Oauth2訪問令牌續(xù)期問題

    SpringSecurity Oauth2訪問令牌續(xù)期問題

    這篇文章主要介紹了SpringSecurity Oauth2訪問令牌續(xù)期問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • idea如何開啟菜單欄

    idea如何開啟菜單欄

    文章介紹了如何通過修改IntelliJ IDEA的樣式文件`ui.lnf.xml`來重新顯示被關(guān)閉的菜單欄,并分享了解決問題的步驟
    2025-01-01
  • nacos(SpringCloud)配置加載過程

    nacos(SpringCloud)配置加載過程

    Nacos是Spring Cloud的配置中心,通過BootstrapApplicationListener和ConfigFileApplicationListener監(jiān)聽器加載配置文件,并通過PropertySourceBootstrapConfiguration將Nacos配置加載到Spring Boot應(yīng)用的environment中
    2024-12-12
  • Java繪圖庫JFreeChart的使用教程

    Java繪圖庫JFreeChart的使用教程

    圖表是一種以簡單方式顯示信息的圖形,JFreeChart允許創(chuàng)建各種交互式和非交互式圖表,本文主要介紹了Java繪圖庫JFreeChart的使用教程,感興趣的可以了解一下
    2023-09-09
  • springboot高并發(fā)下提高吞吐量的實(shí)現(xiàn)

    springboot高并發(fā)下提高吞吐量的實(shí)現(xiàn)

    這篇文章主要介紹了springboot高并發(fā)下提高吞吐量的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • spring aop兩種配置方式

    spring aop兩種配置方式

    這篇文章主要為大家詳細(xì)介紹了spring aop兩種配置方式,主要是注解配置AOP和xml配置aop,需要的朋友可以參考下
    2015-09-09
  • SpringBoot log打印及輸出方式

    SpringBoot log打印及輸出方式

    這篇文章主要介紹了SpringBoot log打印及輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • java報(bào)錯(cuò)之springboot3+vue2項(xiàng)目web服務(wù)層報(bào)錯(cuò)總結(jié)

    java報(bào)錯(cuò)之springboot3+vue2項(xiàng)目web服務(wù)層報(bào)錯(cuò)總結(jié)

    java入門學(xué)習(xí),隨手記錄一下開發(fā)過程中產(chǎn)生的報(bào)錯(cuò),有些錯(cuò)誤是網(wǎng)上搜索再加上自己嘗試,隨手引用了一些其他人的記錄,也是留給自己看的,或是希望能對(duì)其他初學(xué)者有幫助

    2023-06-06
  • Springboot整合RabbitMQ消息中間件的使用

    Springboot整合RabbitMQ消息中間件的使用

    在沒有特別要求的情況下,通常會(huì)選擇RabbitMQ作為消息中間件,本文主要介紹了Springboot整合RabbitMQ消息中間件的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-11-11
  • Spring中@Repository注解的作用和用法以及和@Mapper的區(qū)別詳析

    Spring中@Repository注解的作用和用法以及和@Mapper的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Spring中@Repository注解的作用和用法以及和@Mapper的區(qū)別的相關(guān)資料,注解的作用是標(biāo)識(shí)一個(gè)類為數(shù)據(jù)訪問對(duì)象,并由Spring框架進(jìn)行實(shí)例化和管理,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

晴隆县| 昌平区| 台北县| 四川省| 睢宁县| 永丰县| 新田县| 那曲县| 神木县| 丰原市| 临西县| 台中市| 岫岩| 定襄县| 黑龙江省| 全州县| 尼木县| 赫章县| 修文县| 封丘县| 清流县| 监利县| 苍南县| 柘荣县| 镶黄旗| 商洛市| 瓮安县| 阜宁县| 马山县| 兰考县| 白朗县| 宣城市| 黄骅市| 登封市| 辽源市| 万源市| 绥滨县| 汉中市| 车险| 芜湖市| 黔江区|