I just created an issue and submitted a patch for this:
https://issues.apache.org/jira/browse/CAMEL-5143


On Thu, Apr 5, 2012 at 11:31 PM, Aaron Daubman <[email protected]> wrote:

> Ugh - I think I found my problem.
>
> The camel-mybatis code will iterate over any list passed in and attempt to
> insert each item individually, bypassing foreach support =(
>
> ---from 
> camel/trunk/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
> ---
>
>     private void doInsert(Exchange exchange) throws Exception {
>         SqlSessionFactory client = endpoint.getSqlSessionFactory();
>         SqlSession session = client.openSession();
>         try {
>             Object result;
>             Object in = exchange.getIn().getBody();
>             if (in != null) {
>                 // lets handle arrays or collections of objects*              
>   Iterator<?> iter = ObjectHelper.createIterator(in);
>                 while (iter.hasNext()) {*
>                     Object value = iter.next();
>                     LOG.trace("Inserting: {} using statement: {}", value, 
> statement);
>                     result = session.insert(statement, value);
>                     doProcessResult(exchange, result);
>                 }
>             } else {
>                 LOG.trace("Inserting using statement: {}", statement);
>                 result = session.insert(statement);
>                 doProcessResult(exchange, result);
>             }
>         } finally {
>             session.commit();
>             session.close();
>         }
>     }
>
> ---from 
> camel/trunk/components/camel-mybatis/src/main/java/org/apache/camel/component/mybatis/MyBatisProducer.java
> ---
>
> Would it be possible to add a new statementType = 'InsertList' (similar to
> SelectOne versus SelectList) and add it to the switch statement further up
> in the MyBatisProducer.java code?
>
> I believe it would just be removing the iterator related code above and
> simply calling:
>
> result = session.insert(statement, in);
>
> I would be more than happy to contribute this (any reason this should not
> be included?) but have no idea how? Is there a guide to contributing
> changes or a process for obtaining committer rights?
>
> Thanks again,
>      Aaron
>
> On Thu, Apr 5, 2012 at 4:32 PM, Aaron Daubman <[email protected]> wrote:
>
>> Greetings,
>>
>> I've found some similar questions asked in the past but there never seem
>> to be followups posted. I am looking for an example as how to perform batch
>> insert operations using MyBatis with Camel.
>> The desire is to be able to most efficiently insert 1000s of records at a
>> time from a List<beanObjet>.
>>
>> My route currently returns such a list - it would be great to pass it
>> right along to:
>>
>> to("mybatis:insertbeanObject?statementType=Insert");
>>
>>
>> This should be really simple - example SQL would be:
>> ---snip---
>> INSERT INTO example
>>  (example_id, name, value, other_value)
>> VALUES
>>  (100, 'Name 1', 'Value 1', 'Other 1'),
>>  (101, 'Name 2', 'Value 2', 'Other 2'),
>>  (102, 'Name 3', 'Value 3', 'Other 3'),
>>  (103, 'Name 4', 'Value 4', 'Other 4');
>> ---snip---
>>
>> Then there is this example snippet as how to configure the mapper xml:
>> http://code.google.com/p/mybatis/issues/detail?id=537
>>
>>
>> I don't see why this wouldn't work (and am working to attempt it), but
>> would find it very useful to see a working example if one exists.
>>
>> There is this mainly unanswered thread:
>>
>> http://mybatis-user.963551.n3.nabble.com/MyBatis-Batch-Executor-td3784939.html
>>
>> Then there is this 'working on something' teaser:
>>
>> http://camel.465427.n5.nabble.com/Alan-batch-database-insert-td4452866.html#a4454264
>>
>> I am hoping somebody out there has a full example they may be able to
>> share?
>>
>> Thanks!
>>     Aaron
>>
>
>

Reply via email to