Package org.springframework.batch.item.database.support

# Class AbstractSqlPagingQueryProvider

java.lang.Object
org.springframework.batch.item.database.support.AbstractSqlPagingQueryProvider

All Implemented Interfaces:
  `PagingQueryProvider`

Direct Known Subclasses:
  `H2PagingQueryProvider`, `HsqlPagingQueryProvider`, `MySqlPagingQueryProvider`, `OraclePagingQueryProvider`, `PostgresPagingQueryProvider`, `SqlitePagingQueryProvider`, `SqlWindowingPagingQueryProvider`

public abstract class AbstractSqlPagingQueryProvider extends Object implements PagingQueryProvider
Abstract SQL Paging Query Provider to serve as a base class for all provided SQL paging query providers. Any implementation must provide a way to specify the select clause, from clause and optionally a where clause. In addition a way to specify a single column sort key must also be provided. This sort key will be used to provide the paging functionality. It is recommended that there should be an index for the sort key to provide better performance. Provides properties and preparation for the mandatory "selectClause" and "fromClause" as well as for the optional "whereClause". Also provides property for the mandatory "sortKeys". Note: The columns that make up the sort key must be a true key and not just a column to order by. It is important to have a unique key constraint on the sort key to guarantee that no data is lost between executions.

Since:
  2.0
Author:
  Thomas Risberg, Dave Syer, Michael Minella, Mahmoud Ben Hassine, Benjamin Hetz

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `AbstractSqlPagingQueryProvider()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `abstract String`
  `generateFirstPageQuery(int pageSize)`
  Method generating the query string to be used for retrieving the first page.
  `abstract String`
  `generateJumpToItemQuery(int itemIndex, int pageSize)`
  Method generating the query string to be used for jumping to a specific item position.
  `abstract String`
  `generateRemainingPagesQuery(int pageSize)`
  Method generating the query string to be used for retrieving the pages following the first page.
  `protected String`
  `getFromClause()`
  `String`
  `getGroupClause()`
  The getter for the group by clause
  `int`
  `getParameterCount()`
  The number of parameters that are declared in the query
  `protected String`
  `getSelectClause()`
  `String`
  `getSortKeyPlaceHolder(String keyName)`
  The sort key placeholder will vary depending on whether named parameters or traditional placeholders are used in query strings.
  `Map<String,Order>`
  `getSortKeys()`
  A Map<String, Boolean> of sort columns as the key and boolean for ascending/descending (ascending = true).
  `Map<String,Order>`
  `getSortKeysWithoutAliases()`
  The sort key (unique single column name) without alias.
  `protected String`
  `getWhereClause()`
  `void`
  `init(DataSource dataSource)`
  Check mandatory properties.
  `boolean`
  `isUsingNamedParameters()`
  Indicate whether the generated queries use named parameter syntax.
  `void`
  `setFromClause(String fromClause)`
  `void`
  `setGroupClause(String groupClause)`
  The setter for the group by clause
  `void`
  `setSelectClause(String selectClause)`
  `void`
  `setSortKeys(Map<String,Order> sortKeys)`
  `void`
  `setWhereClause(String whereClause)`

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

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

- ## Constructor Details

  - ### AbstractSqlPagingQueryProvider

    public AbstractSqlPagingQueryProvider()

- ## Method Details

  - ### setGroupClause

    public void setGroupClause(String groupClause)
    The setter for the group by clause
    Parameters:
      `groupClause` - SQL GROUP BY clause part of the SQL query string

  - ### getGroupClause

    public String getGroupClause()
    The getter for the group by clause
    Returns:
      SQL GROUP BY clause part of the SQL query string

  - ### setSelectClause

    public void setSelectClause(String selectClause)
    Parameters:
      `selectClause` - SELECT clause part of SQL query string

  - ### getSelectClause

    protected String getSelectClause()
    Returns:
      SQL SELECT clause part of SQL query string

  - ### setFromClause

    public void setFromClause(String fromClause)
    Parameters:
      `fromClause` - FROM clause part of SQL query string

  - ### getFromClause

    protected String getFromClause()
    Returns:
      SQL FROM clause part of SQL query string

  - ### setWhereClause

    public void setWhereClause(String whereClause)
    Parameters:
      `whereClause` - WHERE clause part of SQL query string

  - ### getWhereClause

    protected String getWhereClause()
    Returns:
      SQL WHERE clause part of SQL query string

  - ### setSortKeys

    public void setSortKeys(Map<String,Order> sortKeys)
    Parameters:
      `sortKeys` - key to use to sort and limit page content

  - ### getSortKeys

    public Map<String,Order> getSortKeys()
    A Map<String, Boolean> of sort columns as the key and boolean for ascending/descending (ascending = true).
    Specified by:
      `getSortKeys` in interface `PagingQueryProvider`
    Returns:
      sortKey key to use to sort and limit page content

  - ### getParameterCount

    public int getParameterCount()
    Description copied from interface: `PagingQueryProvider`
    The number of parameters that are declared in the query
    Specified by:
      `getParameterCount` in interface `PagingQueryProvider`
    Returns:
      number of parameters

  - ### isUsingNamedParameters

    public boolean isUsingNamedParameters()
    Description copied from interface: `PagingQueryProvider`
    Indicate whether the generated queries use named parameter syntax.
    Specified by:
      `isUsingNamedParameters` in interface `PagingQueryProvider`
    Returns:
      true if named parameter syntax is used

  - ### getSortKeyPlaceHolder

    public String getSortKeyPlaceHolder(String keyName)
    The sort key placeholder will vary depending on whether named parameters or traditional placeholders are used in query strings.
    Specified by:
      `getSortKeyPlaceHolder` in interface `PagingQueryProvider`
    Parameters:
      `keyName` - The sort key name
    Returns:
      place holder for sortKey.

  - ### init

    public void init(DataSource dataSource) throws Exception
    Check mandatory properties.
    Specified by:
      `init` in interface `PagingQueryProvider`
    Parameters:
      `dataSource` - DataSource to use for any initialization
    Throws:
      `Exception` - for errors when initializing
    See Also:
      - `InitializingBean.afterPropertiesSet()`

  - ### generateFirstPageQuery

    public abstract String generateFirstPageQuery(int pageSize)
    Method generating the query string to be used for retrieving the first page. This method must be implemented in sub classes.
    Specified by:
      `generateFirstPageQuery` in interface `PagingQueryProvider`
    Parameters:
      `pageSize` - number of rows to read per page
    Returns:
      query string

  - ### generateRemainingPagesQuery

    public abstract String generateRemainingPagesQuery(int pageSize)
    Method generating the query string to be used for retrieving the pages following the first page. This method must be implemented in sub classes.
    Specified by:
      `generateRemainingPagesQuery` in interface `PagingQueryProvider`
    Parameters:
      `pageSize` - number of rows to read per page
    Returns:
      query string

  - ### generateJumpToItemQuery

    public abstract String generateJumpToItemQuery(int itemIndex, int pageSize)
    Method generating the query string to be used for jumping to a specific item position. This method must be implemented in sub classes.
    Specified by:
      `generateJumpToItemQuery` in interface `PagingQueryProvider`
    Parameters:
      `itemIndex` - the index of the item to jump to
      `pageSize` - number of rows to read per page
    Returns:
      query string

  - ### getSortKeysWithoutAliases

    public Map<String,Order> getSortKeysWithoutAliases()
    Description copied from interface: `PagingQueryProvider`
    The sort key (unique single column name) without alias.
    Specified by:
      `getSortKeysWithoutAliases` in interface `PagingQueryProvider`
    Returns:
      sortKey key to use to sort and limit page content (without alias)