[
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