001 package com.alexkasko.springjdbc.iterable; 002 003 import org.springframework.dao.DataAccessException; 004 import org.springframework.jdbc.core.RowMapper; 005 import org.springframework.jdbc.core.namedparam.SqlParameterSource; 006 007 import java.util.Map; 008 009 /** 010 * Extension interface for {@code NamedParameterJdbcOperations}. All methods, that return {@code List} 011 * mirrored with {@code queryForIter} methods that return {@link CloseableIterator}. 012 * Javadocs borrowed from {@code NamedParameterJdbcOperations}. 013 * 014 * @author alexkasko 015 * Date: 11/7/12 016 */ 017 public interface IterableNamedParameterJdbcOperations { 018 019 /** 020 * Expose IterableJdbcTemplate to allow queries 021 * without named parameters 022 */ 023 IterableJdbcOperations getIterableJdbcOperations(); 024 025 /** 026 * Query given SQL to create a prepared statement from SQL and a list 027 * of arguments to bind to the query, mapping each row to a Java object 028 * via a RowMapper. 029 * 030 * @param sql SQL query to execute 031 * @param paramSource container of arguments to bind to the query 032 * @param rowMapper object that will map one object per row 033 * @return the result Iterator, containing mapped objects 034 * @throws org.springframework.dao.DataAccessException 035 * if the query fails 036 */ 037 <T> CloseableIterator<T> queryForIter(String sql, SqlParameterSource paramSource, RowMapper<T> rowMapper) 038 throws DataAccessException; 039 040 /** 041 * Query given SQL to create a prepared statement from SQL and a list 042 * of arguments to bind to the query, mapping each row to a Java object 043 * via a RowMapper. 044 * 045 * @param sql SQL query to execute 046 * @param paramMap map of parameters to bind to the query 047 * (leaving it to the PreparedStatement to guess the corresponding SQL type) 048 * @param rowMapper object that will map one object per row 049 * @return the result Iterator, containing mapped objects 050 * @throws org.springframework.dao.DataAccessException 051 * if the query fails 052 */ 053 <T> CloseableIterator<T> queryForIter(String sql, Map<String, ?> paramMap, RowMapper<T> rowMapper) 054 throws DataAccessException; 055 056 /** 057 * Query given SQL to create a prepared statement from SQL and a 058 * list of arguments to bind to the query, expecting a result list. 059 * <p>The results will be mapped to a List (one entry for each row) of 060 * result objects, each of them matching the specified element type. 061 * 062 * @param sql SQL query to execute 063 * @param paramSource container of arguments to bind to the query 064 * @param elementType the required type of element in the result list 065 * (for example, <code>Integer.class</code>) 066 * @return an Iterator of objects that match the specified element type 067 * @throws org.springframework.dao.DataAccessException 068 * if the query fails 069 * @see org.springframework.jdbc.core.JdbcTemplate#queryForList(String, Class) 070 * @see org.springframework.jdbc.core.SingleColumnRowMapper 071 */ 072 <T> CloseableIterator<T> queryForIter(String sql, SqlParameterSource paramSource, Class<T> elementType) 073 throws DataAccessException; 074 075 /** 076 * Query given SQL to create a prepared statement from SQL and a 077 * list of arguments to bind to the query, expecting a result list. 078 * <p>The results will be mapped to a List (one entry for each row) of 079 * result objects, each of them matching the specified element type. 080 * 081 * @param sql SQL query to execute 082 * @param paramMap map of parameters to bind to the query 083 * (leaving it to the PreparedStatement to guess the corresponding SQL type) 084 * @param elementType the required type of element in the result list 085 * (for example, <code>Integer.class</code>) 086 * @return an Iterator of objects that match the specified element type 087 * @throws org.springframework.dao.DataAccessException 088 * if the query fails 089 * @see org.springframework.jdbc.core.JdbcTemplate#queryForList(String, Class) 090 * @see org.springframework.jdbc.core.SingleColumnRowMapper 091 */ 092 <T> CloseableIterator<T> queryForIter(String sql, Map<String, ?> paramMap, Class<T> elementType) 093 throws DataAccessException; 094 095 /** 096 * Query given SQL to create a prepared statement from SQL and a 097 * list of arguments to bind to the query, expecting a result list. 098 * <p>The results will be mapped to a List (one entry for each row) of 099 * Maps (one entry for each column, using the column name as the key). 100 * Thus Each element in the list will be of the form returned by this interface's 101 * queryForMap() methods. 102 * 103 * @param sql SQL query to execute 104 * @param paramSource container of arguments to bind to the query 105 * @return an Iterator that contains a Map per row 106 * @throws org.springframework.dao.DataAccessException 107 * if the query fails 108 * @see org.springframework.jdbc.core.JdbcTemplate#queryForList(String) 109 */ 110 CloseableIterator<Map<String, Object>> queryForIter(String sql, SqlParameterSource paramSource) throws DataAccessException; 111 112 /** 113 * Query given SQL to create a prepared statement from SQL and a 114 * list of arguments to bind to the query, expecting a result list. 115 * <p>The results will be mapped to a List (one entry for each row) of 116 * Maps (one entry for each column, using the column name as the key). 117 * Each element in the list will be of the form returned by this interface's 118 * queryForMap() methods. 119 * 120 * @param sql SQL query to execute 121 * @param paramMap map of parameters to bind to the query 122 * (leaving it to the PreparedStatement to guess the corresponding SQL type) 123 * @return an Iterator that contains a Map per row 124 * @throws org.springframework.dao.DataAccessException 125 * if the query fails 126 * @see org.springframework.jdbc.core.JdbcTemplate#queryForList(String) 127 */ 128 CloseableIterator<Map<String, Object>> queryForIter(String sql, Map<String, ?> paramMap) throws DataAccessException; 129 130 }