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

MyBatis MapperProvider MessageFormat拼接批量SQL語句執(zhí)行報錯的原因分析及解決辦法

 更新時間:2016年01月18日 10:44:06   投稿:mrr  
這篇文章主要介紹了MyBatis MapperProvider MessageFormat拼接批量SQL語句執(zhí)行報錯的原因分析及解決辦法的相關資料,需要的朋友可以參考下

最近在項目中有這么一段代碼:下載服務器基礎業(yè)務數(shù)據(jù)進行本地批量插入操作,因項目中使用mybatis進行持久化操作,故直接考慮使用mybatis的批量插入功能。

1.以下是Mapper接口的部分代碼

public interface PrintMapper
{
@InsertProvider(type = PrintMapperProvider.class,method = "insertAllLotWithVehicleCode4H2") void insertAllLotWithVehicleCode(List<LotWithVehicleCodeBO> lotWithVehicleCodes);
}

2.對應MapperProvider中函數(shù)片段

public String insertAllLotWithVehicleCode4H2(Map<String,List<LotWithVehicleCodeBO>> map)
{
List<LotWithVehicleCodeBO> lotWithVehicleCodeBOs = map.get("list");

StringBuilder sb = new StringBuilder("INSERT INTO MTC_LOT_WITH_VEHICLE_CODE (LOT_CODE,PRODUCT_VEHICLE_CODE) VALUES ");

MessageFormat messageFormat = new MessageFormat("(" +
"#'{'list[{0}].lotCode }," +
"#'{'list[{0}].productVehicleCode }" +
")"); int size = lotWithVehicleCodeBOs.size(); for (int i = 0; i < size; i++)
{
sb.append(messageFormat.format(new Object[]{i})); 
if (i < size - 1) sb.append(",");
} 
return sb.toString();
}

3.service層

@Transactionalpublic void synchLotWithVehicleCodeToLocalDB(List<LotWithVehicleCodeBO> lotWithVehicleCodeBOs)
{ if(null != lotWithVehicleCodeBOs && lotWithVehicleCodeBOs.size()>0)
{
printMapper.insertAllLotWithVehicleCode(lotWithVehicleCodeBOs);
}
}

程序上線的時候沒有發(fā)生問題,在業(yè)務量猛增的時候,大約同時執(zhí)行500條以上的時候程序就開始報錯:

Caused by: org.apache.ibatis.builder.BuilderException: Improper inline parameter map format. Should be: #{propName,attr1=val1,attr2=val2}
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.buildParameterMapping(SqlSourceBuilder.java:89)
at org.apache.ibatis.builder.SqlSourceBuilder$ParameterMappingTokenHandler.handleToken(SqlSourceBuilder.java:43)
at org.apache.ibatis.parsing.GenericTokenParser.parse(GenericTokenParser.java:25)
at org.apache.ibatis.builder.SqlSourceBuilder.parse(SqlSourceBuilder.java:24)
at org.apache.ibatis.builder.annotation.ProviderSqlSource.createSqlSource(ProviderSqlSource.java:57)
... 61 more

異常已指明SQL語句構建問題,DEBUG進去:

問題根源:

MessageFormat messageFormat = new MessageFormat("(" +
"#'{'list[{0}].lotCode }," +
"#'{'list[{0}].productVehicleCode }," +
")");
int size = lotWithVehicleCodeBOs.size();
for (int i = 0; i < size; i++)
{
   sb.append(messageFormat.format(new Object[]{i})); 
  if (i<size-1) sb.append(",");
}

當size達到3位數(shù)以上時構建出的message為:

(#{list[1,000].lotCode },#{list[1,000].productVehicleCode })

解決辦法:messageFormat.format(new Object[]{i+""}

相關文章

  • SQL?Server備份數(shù)據(jù)庫的完整步驟

    SQL?Server備份數(shù)據(jù)庫的完整步驟

    備份是指對SQL?Server數(shù)據(jù)庫或事務日志進行的復制,下面這篇文章主要給大家介紹了關于SQL?Server備份數(shù)據(jù)庫的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • PL/SQL DEVELOPER 使用的一些技巧

    PL/SQL DEVELOPER 使用的一些技巧

    了解一點編程的常識的人都知道,編碼風格很重要。在閱讀代碼方面,保持一致的編碼風格,閱讀起來比較容易;大家都應該養(yǎng)成一種自己的編碼習慣,并保持下去。
    2013-04-04
  • sql?server2022徹底卸載全過程

    sql?server2022徹底卸載全過程

    這篇文章主要給大家介紹了關于sql?server2022徹底卸載的相關資料,按照下面的文章操作可以完全卸載 SQL Server的現(xiàn)有實例,并對系統(tǒng)進行準備以便可以重新安裝 SQL Server,需要的朋友可以參考下
    2023-10-10
  • VS自帶的SQL server修改密碼并連接使用

    VS自帶的SQL server修改密碼并連接使用

    本文主要介紹了VS自帶的SQL server修改密碼并連接使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • SQL中WHERE變量IS NULL條件導致全表掃描問題的解決方法

    SQL中WHERE變量IS NULL條件導致全表掃描問題的解決方法

    今天在評審接手的項目中的存儲過程時,發(fā)現(xiàn)存在大量的在條件里判斷變量是否NULL的寫法
    2013-09-09
  • 常用SQL語句查詢分享

    常用SQL語句查詢分享

    本文通過幾個小例子,給大家分享一下常用SQL常用的語句,非常的簡單實用,有需要的小伙伴可以參考下。
    2016-01-01
  • 可以獲取客戶端的IP地址的sql語句

    可以獲取客戶端的IP地址的sql語句

    利用SQL語句得到客戶端的IP地址的代碼
    2009-12-12
  • SQL 尚未定義空閑 CPU 條件 - OnIdle 作業(yè)計劃將不起任何作用

    SQL 尚未定義空閑 CPU 條件 - OnIdle 作業(yè)計劃將不起任何作用

    今天在配置sql server 代理服務器的計劃任務的時候發(fā)現(xiàn)了日志中提示這個SQL 尚未定義空閑 CPU 條件 - OnIdle 作業(yè)計劃將不起任何作用信息導致無法執(zhí)行計劃任務,那么可以按照下面的方法解決即可
    2021-06-06
  • SQL?Server超詳細使用教程之從安裝到編寫SQL語句詳解

    SQL?Server超詳細使用教程之從安裝到編寫SQL語句詳解

    這篇文章詳細介紹了如何安裝SQL?Server和SQL?Server?Management?Studio,并通過編寫SQL語句進行數(shù)據(jù)庫操作,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-12-12
  • sqlserver 觸發(fā)器學習(實現(xiàn)自動編號)

    sqlserver 觸發(fā)器學習(實現(xiàn)自動編號)

    前段時間需要用觸發(fā)器做個實現(xiàn)數(shù)據(jù)插入表時自動編號的功能,于是再學習下觸發(fā)器,硬件備份共享于此,以供討論,以免遺忘
    2012-08-08

最新評論

嵩明县| 积石山| 五河县| 沙湾县| 隆德县| 榆林市| 定安县| 中西区| 保山市| 湘潭县| 广昌县| 外汇| 广昌县| 萝北县| 西畴县| 台中县| 宜州市| 博客| 永吉县| 鄄城县| 拜泉县| 沂南县| 那坡县| 竹山县| 甘泉县| 大城县| 屏边| 常宁市| 绍兴市| 色达县| 本溪| 达孜县| 达尔| 左权县| 吉安县| 福清市| 平顶山市| 郑州市| 清水河县| 贵定县| 东安县|