国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 解決sharding JDBC 不支持批量導入問題

解決sharding JDBC 不支持批量導入問題

2022-03-06 13:13我&菜鳥 Java教程

這篇文章主要介紹了解決sharding JDBC 不支持批量導入問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

sharding JDBC 不支持批量導入

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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語句批量更新

今天項目有個刷數據的需求,單條數據修改太慢,想著寫個批量update,三兩下把sql寫好了,發現分表不支持,sharding-jdbc只會把我第一個表名填充成正確表名,后面的表名都沒有修改。

mybastis如下:

?
1
2
3
4
5
<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如下:

?
1
2
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語句更新是不支持的。

修改思路

既然表名不支持自動多個,那我就自己替換表名,

先在代碼中根據表的分表規則得到表名,在賦值在每個sql語句上

代碼如下:

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

比如我這張表分了八個表,則按8取余這樣每個條數據都對應好了表名,

mybastis如下:

?
1
2
3
4
5
<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>

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

最終sql如下:

?
1
2
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 = ? ;

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

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/xyj179/p/11454562.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产中文字幕在线看 | 国产精品免费自拍 | 久久se精品一区精品二区 | 国产精品99久久免费观看 | 一级大片av| 日韩精品一区二 | av中文字幕在线观看 | 国产中文字幕一区 | 中文字幕国产在线视频 | 亚洲aaa在线观看 | 免费观看一区二区三区毛片软件 | 国产福利视频在线 | 一级片免费视频 | 成年人黄色影院 | 国产精品福利91 | 99久久精品免费看国产一区二区三区 | 国产精品视频久久 | 欧美专区在线观看 | 亚洲v在线 | 免费欧美| 91精品视频一区 | 日韩视频专区 | 欧美色影院 | 青青久视频 | 国产综合av | www.久久视频 | 在线免费观看日韩视频 | 九色网址| 亚洲午夜在线 | 色综合久久久 | 综合久久网 | 亚洲成人精品 | 亚洲精品久久久久久动漫 | 午夜精品福利在线观看 | 欧美成人影院 | 国产一区二区三区欧美 | 一区视频| 毛片免费视频 | 亚洲成av人影片在线观看 | 免费特级黄毛片 | 久久久久久久国产精品免费播放 |