2017-11-20 2 views
0

wenn i Kamel Mybatis Komponente in meinem Projekt verwenden, fand ich, dass die Liste Parameter 'Liste' Name musscamel mybatis-Komponente unterstützt nur Listenparameter, der 'list' benennen muss?

Das folgende Beispiel funktioniert:

from(xxx) 
    ... 
    ... 
    .setHeader("list",simple("${body.OriginCodeList}")) 
    .to("mybatis:selectByInnerCodeList?statementType=SelectList&inputHeader=list") 

Mybatis Mapper xml:

<select id="selectByInnerCodeList" resultMap="BaseResultMap" parameterType="java.util.List"> 
 
    select 
 
    <include refid="Base_Column_List" /> 
 
    from MF_FundManagerNew 
 
    WHERE Incumbent=1 
 
    <if test="list!=null and list.size()>0 "> 
 
     and InnerCode IN 
 
     <foreach collection="list" item="innerCodeSingle" open="(" close=")" separator=","> 
 
     #{innerCodeSingle} 
 
     </foreach> 
 
    </if> 
 
</select>

es Erfolg

Diese Route schlägt fehl

from(xxx) 
    ... 
    ... 
    .setHeader("innerCodeList",simple("${body.OriginCodeList}")) 
    .to("mybatis:selectByInnerCodeList?statementType=SelectList&inputHeader=innerCodeList") 

Mybatis Mapper xml:

<select id="selectByInnerCodeList" resultMap="BaseResultMap" parameterType="java.util.List"> 
 
    select 
 
    <include refid="Base_Column_List" /> 
 
    from MF_FundManagerNew 
 
    WHERE Incumbent=1 
 
    <if test="innerCodeList!=null and innerCodeList.size()>0 "> 
 
     and InnerCode IN 
 
     <foreach collection="innerCodeList" item="innerCodeSingle" open="(" close=")" separator=","> 
 
     #{innerCodeSingle} 
 
     </foreach> 
 
    </if> 
 
</select>

Das zweite Beispiel wirft die folgende Ausnahme:

Error querying database. Cause: org.apache.ibatis.binding.BindingException: 
Parameter 'innerCodeList' not found. Available parameters are [collection, list] 
Cause: org.apache.ibatis.binding.BindingException: Parameter 'innerCodeList' not found. Available parameters are [collection, list] 
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) ~[mybatis-3.4.1.jar:3.4.1] 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150) ~[mybatis-3.4.1.jar:3.4.1] 
at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141) ~[mybatis-3.4.1.jar:3.4.1] 
at org.apache.camel.component.mybatis.MyBatisProducer.doSelectList(MyBatisProducer.java:117) ~[camel-mybatis-2.20.0.jar:2.20.0] 
at org.apache.camel.component.mybatis.MyBatisProducer.process(MyBatisProducer.java:63) ~[camel-mybatis-2.20.0.jar:2.20.0] 
at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) ~[camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:148) ~[camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:138) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.FilterProcessor.process(FilterProcessor.java:57) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:97) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.component.mybatis.MyBatisConsumer.processBatch(MyBatisConsumer.java:130) [camel-mybatis-2.20.0.jar:2.20.0] 
at org.apache.camel.component.mybatis.MyBatisConsumer.poll(MyBatisConsumer.java:100) [camel-mybatis-2.20.0.jar:2.20.0] 
at org.apache.camel.impl.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:174) [camel-core-2.20.0.jar:2.20.0] 
at org.apache.camel.impl.ScheduledPollConsumer.run(ScheduledPollConsumer.java:101) [camel-core-2.20.0.jar:2.20.0] 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_144] 
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_144] 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_144] 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_144] 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_144] 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_144] 
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_144] 
+0

für Mybatis sein, wenn sie nur das Sammelobjekt Sie verbindlich sind, dann wäre es standardmäßig sein sein 'collection' oder' list'. Aber wenn du willst, kannst du die 'liste' in eine Map setzen und dann kann dein Map Key' innerCodeList' sein und MyBatis kann gegen den Schlüssel 'innerCodeList' auflösen. – MohamedSanaulla

+0

Vielen Dank für deine Antwort. Es ist mein erstes Mal, hier eine Frage zu stellen, und es tut mir leid, dass ich auf Englisch schlecht bin. –

+0

es funktioniert, wie Sie sagen, vielen Dank –

Antwort

1

Lassen Sie mich nur m setzen y Kommentar als Antwort hier:

In Mybatis, wenn Sie ein Collection Objekt direkt verbindlich sind, dann wird es in der Mybatis XML zur Verfügung steht als collection oder list variabel, da es standardmäßig es zu diesem Namen.

Wenn Sie einen anderen Schlüssel verwenden müssen, dann können Sie entweder wickeln Sie es in ein Objekt mit der Eigenschaft, innerCodeList oder als innerCodeList in einem Map mit Schlüssel setzen. In diesem Fall wird die parameterType für <select> würde YourCustomClass oder map

Verwandte Themen