[[mybatis-component]]
= MyBatis Component
//THIS FILE IS COPIED: EDIT THE SOURCE FILE:
:page-source: components/camel-mybatis/src/main/docs/mybatis-component.adoc
:docTitle: MyBatis
:artifactId: camel-mybatis
:description: Performs a query, poll, insert, update or delete in a relational database using MyBatis.
:since: 2.7
:supportLevel: Stable
:component-header: Both producer and consumer are supported

*Since Camel {since}*

*{component-header}*

The MyBatis component allows you to query, poll, insert, update and
delete data in a relational database using http://mybatis.org/[MyBatis].

Maven users will need to add the following dependency to their `pom.xml`
for this component:

[source,xml]
----
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-mybatis</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
----

== URI format

[source,text]
----
mybatis:statementName[?options]
----

Where *statementName* is the statement name in the MyBatis XML mapping
file which maps to the query, insert, update or delete operation you
wish to evaluate.

You can append query options to the URI in the following format,
`?option=value&option=value&...`

This component will by default load the MyBatis SqlMapConfig file from
the root of the classpath with the expected name of
`SqlMapConfig.xml`. +
 If the file is located in another location, you will need to configure
the `configurationUri` option on the `MyBatisComponent` component.

== Options

// component options: START
The MyBatis component supports 5 options, which are listed below.



[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *configurationUri* (common) | Location of MyBatis xml configuration file. The default value is: SqlMapConfig.xml loaded from the classpath | SqlMapConfig.xml | String
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *sqlSessionFactory* (advanced) | To use the SqlSessionFactory |  | SqlSessionFactory
|===
// component options: END


// endpoint options: START
The MyBatis endpoint is configured using URI syntax:

----
mybatis:statement
----

with the following path and query parameters:

=== Path Parameters (1 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *statement* | *Required* The statement name in the MyBatis XML mapping file which maps to the query, insert, update or delete operation you wish to evaluate. |  | String
|===


=== Query Parameters (32 parameters):


[width="100%",cols="2,5,^1,2",options="header"]
|===
| Name | Description | Default | Type
| *bridgeErrorHandler* (consumer) | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | boolean
| *maxMessagesPerPoll* (consumer) | This option is intended to split results returned by the database pool into the batches and deliver them in multiple exchanges. This integer defines the maximum messages to deliver in single exchange. By default, no maximum is set. Can be used to set a limit of e.g. 1000 to avoid when starting up the server that there are thousands of files. Set a value of 0 or negative to disable it. | 0 | int
| *onConsume* (consumer) | Statement to run after data has been processed in the route |  | String
| *routeEmptyResultSet* (consumer) | Whether allow empty resultset to be routed to the next hop | false | boolean
| *sendEmptyMessageWhenIdle* (consumer) | If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead. | false | boolean
| *transacted* (consumer) | Enables or disables transaction. If enabled then if processing an exchange failed then the consumer breaks out processing any further exchanges to cause a rollback eager. | false | boolean
| *useIterator* (consumer) | Process resultset individually or as a list | true | boolean
| *exceptionHandler* (consumer) | To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored. |  | ExceptionHandler
| *exchangePattern* (consumer) | Sets the exchange pattern when the consumer creates an exchange. The value can be one of: InOnly, InOut, InOptionalOut |  | ExchangePattern
| *pollStrategy* (consumer) | A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel. |  | PollingConsumerPollStrategy
| *processingStrategy* (consumer) | To use a custom MyBatisProcessingStrategy |  | MyBatisProcessingStrategy
| *executorType* (producer) | The executor type to be used while executing statements. simple - executor does nothing special. reuse - executor reuses prepared statements. batch - executor reuses statements and batches updates. The value can be one of: SIMPLE, REUSE, BATCH | SIMPLE | ExecutorType
| *inputHeader* (producer) | User the header value for input parameters instead of the message body. By default, inputHeader == null and the input parameters are taken from the message body. If outputHeader is set, the value is used and query parameters will be taken from the header instead of the body. |  | String
| *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
| *outputHeader* (producer) | Store the query result in a header instead of the message body. By default, outputHeader == null and the query result is stored in the message body, any existing content in the message body is discarded. If outputHeader is set, the value is used as the name of the header to store the query result and the original message body is preserved. Setting outputHeader will also omit populating the default CamelMyBatisResult header since it would be the same as outputHeader all the time. |  | String
| *statementType* (producer) | Mandatory to specify for the producer to control which kind of operation to invoke. The value can be one of: SelectOne, SelectList, Insert, InsertList, Update, UpdateList, Delete, DeleteList |  | StatementType
| *basicPropertyBinding* (advanced) | Whether the endpoint should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
| *synchronous* (advanced) | Sets whether synchronous processing should be strictly used, or Camel is allowed to use asynchronous processing (if supported). | false | boolean
| *backoffErrorThreshold* (scheduler) | The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in. |  | int
| *backoffIdleThreshold* (scheduler) | The number of subsequent idle polls that should happen before the backoffMultipler should kick-in. |  | int
| *backoffMultiplier* (scheduler) | To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured. |  | int
| *delay* (scheduler) | Milliseconds before the next poll. | 500 | long
| *greedy* (scheduler) | If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages. | false | boolean
| *initialDelay* (scheduler) | Milliseconds before the first poll starts. | 1000 | long
| *repeatCount* (scheduler) | Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever. | 0 | long
| *runLoggingLevel* (scheduler) | The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that. The value can be one of: TRACE, DEBUG, INFO, WARN, ERROR, OFF | TRACE | LoggingLevel
| *scheduledExecutorService* (scheduler) | Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool. |  | ScheduledExecutorService
| *scheduler* (scheduler) | To use a cron scheduler from either camel-spring or camel-quartz component. The value can be one of: none, spring, quartz | none | String
| *schedulerProperties* (scheduler) | To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. |  | Map
| *startScheduler* (scheduler) | Whether the scheduler should be auto started. | true | boolean
| *timeUnit* (scheduler) | Time unit for initialDelay and delay options. The value can be one of: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS | MILLISECONDS | TimeUnit
| *useFixedDelay* (scheduler) | Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details. | true | boolean
|===
// endpoint options: END




== Message Headers

Camel will populate the result message, either IN or OUT with a header
with the statement used:

[width="100%",cols="10%,10%,80%",options="header",]
|=======================================================================
|Header |Type |Description

|`CamelMyBatisStatementName` |`String` |The *statementName* used (for example: insertAccount).

|`CamelMyBatisResult` |`Object` |The *response* returned from MtBatis in any of the operations. For
instance an `INSERT` could return the auto-generated key, or number of
rows etc.
|=======================================================================

== Message Body

The response from MyBatis will only be set as the body if it's a
`SELECT` statement. That means, for example, for `INSERT` statements
Camel will not replace the body. This allows you to continue routing and
keep the original body. The response from MyBatis is always stored in
the header with the key `CamelMyBatisResult`.

== Samples

For example if you wish to consume beans from a JMS queue and insert
them into a database you could do the following:

[source,java]
----
from("activemq:queue:newAccount")
  .to("mybatis:insertAccount?statementType=Insert");
----

Notice we have to specify the `statementType`, as we need to instruct
Camel which kind of operation to invoke.

Where *insertAccount* is the MyBatis ID in the SQL mapping file:

[source,xml]
----
  <!-- Insert example, using the Account parameter class -->
  <insert id="insertAccount" parameterType="Account">
    insert into ACCOUNT (
      ACC_ID,
      ACC_FIRST_NAME,
      ACC_LAST_NAME,
      ACC_EMAIL
    )
    values (
      #{id}, #{firstName}, #{lastName}, #{emailAddress}
    )
  </insert>
----

== Using StatementType for better control of MyBatis

When routing to an MyBatis endpoint you will want more fine grained
control so you can control whether the SQL statement to be executed is a
`SELECT`, `UPDATE`, `DELETE` or `INSERT` etc. So for instance if we want
to route to an MyBatis endpoint in which the IN body contains parameters
to a `SELECT` statement we can do:

In the code above we can invoke the MyBatis statement
`selectAccountById` and the IN body should contain the account id we
want to retrieve, such as an `Integer` type.

We can do the same for some of the other operations, such as
`SelectList`:

And the same for `UPDATE`, where we can send an `Account` object as the
IN body to MyBatis:

=== Using InsertList StatementType

*Since Camel 2.10*

MyBatis allows you to insert multiple rows using its for-each batch
driver. To use this, you need to use the <foreach> in the mapper XML
file. For example as shown below:

Then you can insert multiple rows, by sending a Camel message to the
`mybatis` endpoint which uses the `InsertList` statement type, as shown
below:

=== Using UpdateList StatementType

*Since Camel 2.11*

MyBatis allows you to update multiple rows using its for-each batch
driver. To use this, you need to use the <foreach> in the mapper XML
file. For example as shown below:

[source,xml]
----
<update id="batchUpdateAccount" parameterType="java.util.Map">
    update ACCOUNT set
    ACC_EMAIL = #{emailAddress}
    where
    ACC_ID in
    <foreach item="Account" collection="list" open="(" close=")" separator=",">
        #{Account.id}
    </foreach>
</update>
----

Then you can update multiple rows, by sending a Camel message to the
mybatis endpoint which uses the UpdateList statement type, as shown
below:

[source,java]
----
from("direct:start")
    .to("mybatis:batchUpdateAccount?statementType=UpdateList")
    .to("mock:result");
----

=== Using DeleteList StatementType

*Since Camel 2.11*

MyBatis allows you to delete multiple rows using its for-each batch
driver. To use this, you need to use the <foreach> in the mapper XML
file. For example as shown below:

[source,xml]
----
<delete id="batchDeleteAccountById" parameterType="java.util.List">
    delete from ACCOUNT
    where
    ACC_ID in
    <foreach item="AccountID" collection="list" open="(" close=")" separator=",">
        #{AccountID}
    </foreach>
</delete>
----

Then you can delete multiple rows, by sending a Camel message to the
mybatis endpoint which uses the DeleteList statement type, as shown
below:

[source,java]
----
from("direct:start")
    .to("mybatis:batchDeleteAccount?statementType=DeleteList")
    .to("mock:result");
----

=== Notice on InsertList, UpdateList and DeleteList StatementTypes

Parameter of any type (List, Map, etc.) can be passed to mybatis and an
end user is responsible for handling it as required +
 with the help of http://www.mybatis.org/mybatis-3/dynamic-sql.html[mybatis
dynamic queries] capabilities.

=== Scheduled polling example

This component supports scheduled polling and can therefore be used as
a Polling Consumer. For example to poll the
database every minute:

[source,java]
----
from("mybatis:selectAllAccounts?delay=60000")
  .to("activemq:queue:allAccounts");
----

See "ScheduledPollConsumer Options"
on Polling Consumer for more options.

Alternatively you can use another mechanism for triggering the scheduled
polls, such as the xref:timer-component.adoc[Timer] or xref:timer-component.adoc[Quartz]
components. In the sample below we poll the database, every 30 seconds
using the xref:timer-component.adoc[Timer] component and send the data to the JMS
queue:

[source,java]
----
from("timer://pollTheDatabase?delay=30000")
  .to("mybatis:selectAllAccounts")
  .to("activemq:queue:allAccounts");
----

And the MyBatis SQL mapping file used:

[source,xml]
----
  <!-- Select with no parameters using the result map for Account class. -->
  <select id="selectAllAccounts" resultMap="AccountResult">
    select * from ACCOUNT
  </select>
----

=== Using onConsume

This component supports executing statements *after* data have been
consumed and processed by Camel. This allows you to do post updates in
the database. Notice all statements must be `UPDATE` statements. Camel
supports executing multiple statements whose names should be separated
by commas.

The route below illustrates we execute the *consumeAccount* statement
data is processed. This allows us to change the status of the row in the
database to processed, so we avoid consuming it twice or more.

And the statements in the sqlmap file:

=== Participating in transactions

Setting up a transaction manager under camel-mybatis can be a little bit
fiddly, as it involves externalising the database configuration outside
the standard MyBatis `SqlMapConfig.xml` file.

The first part requires the setup of a `DataSource`. This is typically a
pool (either DBCP, or c3p0), which needs to be wrapped in a Spring
proxy. This proxy enables non-Spring use of the `DataSource` to
participate in Spring transactions (the MyBatis `SqlSessionFactory` does
just this).

[source,xml]
----
<bean id="dataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy">
    <constructor-arg>
        <bean class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="org.postgresql.Driver"/>
            <property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/myDatabase"/>
            <property name="user" value="myUser"/>
            <property name="password" value="myPassword"/>
        </bean>
    </constructor-arg>
</bean>
----

This has the additional benefit of enabling the database configuration
to be externalised using property placeholders.

A transaction manager is then configured to manage the outermost
`DataSource`:

[source,xml]
----
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>
----

A http://www.mybatis.org/spring/index.html[mybatis-spring]
http://www.mybatis.org/spring/factorybean.html[`SqlSessionFactoryBean`]
then wraps that same `DataSource`:

[source,xml]
----
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <!-- standard mybatis config file -->
<property name="configLocation" value="/META-INF/SqlMapConfig.xml"/>
    <!-- externalised mappers -->
<property name="mapperLocations" value="classpath*:META-INF/mappers/**/*.xml"/>
</bean>
----

The camel-mybatis component is then configured with that factory:

[source,xml]
----
<bean id="mybatis" class="org.apache.camel.component.mybatis.MyBatisComponent">
    <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
----

Finally, a transaction policy is defined
over the top of the transaction manager, which can then be used as
usual:

[source,xml]
----
<bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy">
    <property name="transactionManager" ref="txManager"/>
    <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>
</bean>

<camelContext id="my-model-context" xmlns="http://camel.apache.org/schema/spring">
    <route id="insertModel">
        <from uri="direct:insert"/>
        <transacted ref="PROPAGATION_REQUIRED"/>
        <to uri="mybatis:myModel.insert?statementType=Insert"/>
    </route>
</camelContext>
----


include::camel-spring-boot::page$mybatis-starter.adoc[]
