[
https://issues.apache.org/jira/browse/CAMEL-5143?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13248342#comment-13248342
]
Aaron Daubman commented on CAMEL-5143:
--------------------------------------
Whatever makes the most sense works for me... I just named it InsertList as it
seemed the converse/analog to the already existing SelectList. Thanks for the
quick work applying to trunk!
InsertForEach might make good sense as well since you will probably need to set
up some sort of foreach operation in your mybatis mapper to use what you pass
in... although I'm a novice mybatis user (you might be able to use the input
from this method for collection-referenced things as well which wouldn't
require a foreach?)
> 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
> Assignee: Claus Ibsen
> 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