[ 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