camel-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aaron Daubman (Updated) (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CAMEL-5143) Add a new camel-mybatis statementType of 'InsertList' (similar to SelectOne versus SelectList) to allow for mybatis foreach driven batch insert statements
Date Fri, 06 Apr 2012 04:19:27 GMT

     [ https://issues.apache.org/jira/browse/CAMEL-5143?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Aaron Daubman updated CAMEL-5143:
---------------------------------

    Attachment: MyBatisInsertListTest.java
                Patch_for_CAMEL-5143.txt

Attached a patch for three modified files (created using IntelliJ IDEA) as well as the new
test file.
                
> Add a new camel-mybatis statementType of 'InsertList' (similar to SelectOne versus SelectList)
to allow for mybatis foreach driven batch insert statements
> ----------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-5143
>                 URL: https://issues.apache.org/jira/browse/CAMEL-5143
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-mybatis
>    Affects Versions: 2.10.0
>            Reporter: Aaron Daubman
>            Priority: Minor
>              Labels: batch, foreach, insert, mybatis
>             Fix For: 2.10.0
>
>         Attachments: MyBatisInsertListTest.java, Patch_for_CAMEL-5143.txt
>
>   Original Estimate: 2h
>  Remaining Estimate: 2h
>
> The camel-mybatis code will iterate over any list passed in and attempt to insert each
item individually, bypassing foreach support in statements like:
>     <insert id="batchInsertdataCore" parameterType="java.util.List">
>         INSERT INTO CORE_DATA (
>         <include refid="dataCoreColumns"/>
>         )
>         VALUES (
>         <foreach item="dataCore" collection="_parameter" open="" close="" separator="),(">
>             #{dataCore.event_id}, #{dataCore.start_time_val}, #{dataCore.end_time_val}
>         </foreach>
>         )
>     </insert>
> This results in mybatis generating the following error even when the route is receiving
a list of objects as desired:
> ### Error updating database.  Cause: org.apache.ibatis.builder.BuilderException: Error
evaluating expression '_parameter'.  Return value (dataCore{
>     event_id=111222333,
>     start_time_val=Thu Mar 01 02:03:04 EST 2001,
>     end_time_val=Thu Mar 01 02:03:05 EST 2001,
> }
> ) was not iterable.
> ### The error may exist in mybatis/dataCore.xml
> ### The error may involve dataCore.batchInsertdataCore
> ### The error occurred while executing an update
> ---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
---
> It should be simple 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.
> Then a new doInsertBatch would be created, copying the code above and just emoving the
iterator related code, simply calling:
> result = session.insert(statement, in);

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Mime
View raw message