...
Div |
---|
class | confluenceTableSmall |
---|
|
Option | Type | Default | Description |
---|
consumer.onConsume
| String
| null
| Statements to run after consuming. Can be used, for example, to update rows after they have been consumed and processed in Camel. See sample later. Multiple statements can be separated with commas. | consumer.useIterator
| boolean
| true
| If true each row returned when polling will be processed individually. If false the entire List of data is set as the IN body. | consumer.routeEmptyResultSet
| boolean
| false
| Sets whether empty result sets should be routed. | statementType
| StatementType
| null
| Mandatory to specify for the producer to control which kind of operation to invoke. The enum values are: SelectOne , SelectList , Insert , InsertList , Update , UpdateList , Delete , and DeleteList . Notice: InsertList is available as of Camel 2.10, and UpdateList , DeleteList is available as of Camel 2.11. | maxMessagesPerPoll
| int
| 0
| 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. | executorType
| String
| null
| Camel 2.11: The executor type to be used while executing statements. The supported values are: simple, reuse, batch. By default, the value is not specified and is equal to what MyBatis uses, i.e. simple. simple executor does nothing special. reuse executor reuses prepared statements. batch executor reuses statements and batches updates. | outputHeader
| String | null | Camel 2.15: To store the result as a header instead of the message body. This allows to preserve the existing message body as-is. | inputHeader | String | null | Camel 2.15: "inputHeader" parameter to use a header value as input to the component instead of the body. | transacted | boolean | false | Camel 2.16.2: SQL consumer only:Enables or disables transaction. If enabled then if processing an exchange failed then the consumer break out processing any further exchanges to cause a rollback eager |
|
Camel will populate the result message, either IN or OUT with a header with the statement used:
...
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:
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisSelectOneTest.java} |
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
:
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisSelectListTest.java} |
And the same for
UPDATE
, where we can send an
Account
object as the IN body to MyBatis:
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisUpdateTest.java} |
Using InsertList StatementType
...
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:
Wiki Markup |
---|
{snippet:id=insertList|lang=xml|url=camel/trunk/components/camel-mybatis/src/test/resources/org/apache/camel/component/mybatis/Account.xml} |
Then you can insert multiple rows, by sending a Camel message to the
mybatis
endpoint which uses the
InsertList
statement type, as shown below:
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisInsertListTest.java} |
Using UpdateList StatementType
...
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.
Wiki Markup |
---|
{snippet:id=e1|lang=java|url=camel/trunk/components/camel-mybatis/src/test/java/org/apache/camel/component/mybatis/MyBatisQueueTest.java} |
And the statements in the sqlmap file:
Wiki Markup |
---|
{snippet:id=e1|lang=xml|url=camel/trunk/components/camel-mybatis/src/test/resources/org/apache/camel/component/mybatis/Account.xml} |
Wiki Markup |
---|
{snippet:id=e2|lang=xml|url=camel/trunk/components/camel-mybatis/src/test/resources/org/apache/camel/component/mybatis/Account.xml} |
Participating in transactions
...