org.springframework.batch.item.database

## Class JdbcBatchItemWriter<T>

- java.lang.Object
- - org.springframework.batch.item.database.JdbcBatchItemWriter<T>

- All Implemented Interfaces:
    ItemWriter<T>, org.springframework.beans.factory.InitializingBean

      public class JdbcBatchItemWriter<T>
      extends java.lang.Object
      implements ItemWriter<T>, org.springframework.beans.factory.InitializingBean

  `ItemWriter` that uses the batching features from `NamedParameterJdbcTemplate` to execute a batch of statements for all items provided.

  The user must provide an SQL query and a special callback for either of `ItemPreparedStatementSetter` or `ItemSqlParameterSourceProvider`. You can use either named parameters or the traditional '?' placeholders. If you use the named parameter support then you should provide a `ItemSqlParameterSourceProvider`, otherwise you should provide a `ItemPreparedStatementSetter`. This callback would be responsible for mapping the item to the parameters needed to execute the SQL statement.
  It is expected that `write(List)` is called inside a transaction.
  The writer is thread-safe after its properties are set (normal singleton behavior), so it can be used to write in multiple concurrent transactions.
  Since:
    2.0
  Author:
    Dave Syer, Thomas Risberg, Michael Minella

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `assertUpdates`
    `protected ItemPreparedStatementSetter<T>` | `itemPreparedStatementSetter`
    `protected ItemSqlParameterSourceProvider<T>` | `itemSqlParameterSourceProvider`
    `protected static org.apache.commons.logging.Log` | `logger`
    `protected org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations` | `namedParameterJdbcTemplate`
    `protected int` | `parameterCount`
    `protected java.lang.String` | `sql`
    `protected boolean` | `usingNamedParameters`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JdbcBatchItemWriter()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `afterPropertiesSet()` Check mandatory properties - there must be a SimpleJdbcTemplate and an SQL statement plus a parameter source.
    `void` | `setAssertUpdates(boolean assertUpdates)` Public setter for the flag that determines whether an assertion is made that all items cause at least one row to be updated.
    `void` | `setDataSource(javax.sql.DataSource dataSource)` Public setter for the data source for injection purposes.
    `void` | `setItemPreparedStatementSetter(ItemPreparedStatementSetter<T> preparedStatementSetter)` Public setter for the `ItemPreparedStatementSetter`.
    `void` | `setItemSqlParameterSourceProvider(ItemSqlParameterSourceProvider<T> itemSqlParameterSourceProvider)` Public setter for the `ItemSqlParameterSourceProvider`.
    `void` | `setJdbcTemplate(org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations namedParameterJdbcTemplate)` Public setter for the `NamedParameterJdbcOperations`.
    `void` | `setSql(java.lang.String sql)` Public setter for the query string to execute on write.
    `void` | `write(java.util.List<? extends T> items)` Process the supplied data element.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### logger

          protected static final org.apache.commons.logging.Log logger

    - #### namedParameterJdbcTemplate

          protected org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations namedParameterJdbcTemplate

    - #### itemPreparedStatementSetter

          protected ItemPreparedStatementSetter<T> itemPreparedStatementSetter

    - #### itemSqlParameterSourceProvider

          protected ItemSqlParameterSourceProvider<T> itemSqlParameterSourceProvider

    - #### sql

          protected java.lang.String sql

    - #### assertUpdates

          protected boolean assertUpdates

    - #### parameterCount

          protected int parameterCount

    - #### usingNamedParameters

          protected boolean usingNamedParameters

  - ### Constructor Detail

    - #### JdbcBatchItemWriter

          public JdbcBatchItemWriter()

  - ### Method Detail

    - #### setAssertUpdates

          public void setAssertUpdates(boolean assertUpdates)

      Public setter for the flag that determines whether an assertion is made that all items cause at least one row to be updated.
      Parameters:
        `assertUpdates` - the flag to set. Defaults to true;

    - #### setSql

          public void setSql(java.lang.String sql)

      Public setter for the query string to execute on write. The parameters should correspond to those known to the `ItemPreparedStatementSetter`.
      Parameters:
        `sql` - the query to set

    - #### setItemPreparedStatementSetter

          public void setItemPreparedStatementSetter(ItemPreparedStatementSetter<T> preparedStatementSetter)

      Public setter for the `ItemPreparedStatementSetter`.
      Parameters:
        `preparedStatementSetter` - the `ItemPreparedStatementSetter` to set. This is required when using traditional '?' placeholders for the SQL statement.

    - #### setItemSqlParameterSourceProvider

          public void setItemSqlParameterSourceProvider(ItemSqlParameterSourceProvider<T> itemSqlParameterSourceProvider)

      Public setter for the `ItemSqlParameterSourceProvider`.
      Parameters:
        `itemSqlParameterSourceProvider` - the `ItemSqlParameterSourceProvider` to set. This is required when using named parameters for the SQL statement and the type to be written does not implement `Map`.

    - #### setDataSource

          public void setDataSource(javax.sql.DataSource dataSource)

      Public setter for the data source for injection purposes.
      Parameters:
        `dataSource` - `DataSource` to use for querying against

    - #### setJdbcTemplate

          public void setJdbcTemplate(org.springframework.jdbc.core.namedparam.NamedParameterJdbcOperations namedParameterJdbcTemplate)

      Public setter for the `NamedParameterJdbcOperations`.
      Parameters:
        `namedParameterJdbcTemplate` - the `NamedParameterJdbcOperations` to set

    - #### afterPropertiesSet

          public void afterPropertiesSet()

      Check mandatory properties - there must be a SimpleJdbcTemplate and an SQL statement plus a parameter source.
      Specified by:
        `afterPropertiesSet` in interface `org.springframework.beans.factory.InitializingBean`

    - #### write

          public void write(java.util.List<? extends T> items)
                     throws java.lang.Exception

      Description copied from interface: `ItemWriter`
      Process the supplied data element. Will not be called with any null items in normal operation.
      Specified by:
        `write` in interface `ItemWriter<T>`
      Parameters:
        `items` - items to be written
      Throws:
        `java.lang.Exception` - if there are errors. The framework will catch the exception and convert or rethrow it as appropriate.