2015-10-27 248 views
0

插入我的文檔中讀取here駱駝 - 駱駝-SQL批處理使用useMessageBodyForSql

「如果批次設置爲true,則入站郵件正文的解釋稍有變化 - 而不是參數,在一個迭代組件需要一個包含參數迭代器的迭代器;外層迭代器的大小決定了批處理大小。「

「從駝峯2.16開始,你可以使用允許使用消息主體作爲SQL語句的選項useMessageBodyForSql,然後必須在關鍵字SqlConstants.SQL_PARAMETERS的頭部提供SQL參數,這允許SQL組件以更加動態的方式工作,因爲SQL查詢來自消息正文。「

我有以下路線:

from("direct:processLine") 
      .setHeader(SqlConstants.SQL_PARAMETERS, simple("${body}")) 
      .setBody(constant("INSERT INTO SOME_TABLE " 
        " (Param1, Param2) " + 
        " values " + 
        " (:?Param1,:?Param2)")) 
      .to("sql://query?useMessageBodyForSql=true&batch=true&dataSource=dataSource"); 

身體是地圖匹配的參數列表中的鍵/值。

這可以工作,但並不像預期的那樣。

每行都是逐一插入的,而不是預期的批量插入。這種選擇的組合甚至可能嗎?

如果不可能,那麼完成此操作的替代方法是什麼?

回答

-1

當你使用sql時,它會觸發多個插入語句來處理一個接一個的語句。嘗試使用orm像mybatis或ibatis。

即使您可以創建一個dao類。調用sqlSession將所有映射值傳遞給orm以作爲批處理進行插入。

+0

我不認爲這是真的。 batch = true確實使用批量插入,因此無需爲此使用mybatis或ibatis。問題是useMessageBodyForSql和batch = true在一起工作不好。 – DKIT