001 package com.alexkasko.springjdbc.iterable; 002 003 import org.springframework.dao.DataAccessException; 004 import org.springframework.jdbc.core.PreparedStatementCreator; 005 import org.springframework.jdbc.core.PreparedStatementSetter; 006 import org.springframework.jdbc.core.RowMapper; 007 008 import java.util.Map; 009 010 /** 011 * Extension interface for {@code JdbcOperations}. All methods, that return {@code List} 012 * mirrored with {@code queryForIter} methods that return {@link CloseableIterator}. 013 * Javadocs borrowed from {@code JdbcOperations}. 014 * 015 * @author alexkasko 016 * Date: 11/7/12 017 * @see IterableNamedParameterJdbcOperations 018 */ 019 public interface IterableJdbcOperations { 020 /** 021 * Query using a prepared statement, mapping each row to a Java object 022 * via a RowMapper. 023 * <p>A PreparedStatementCreator can either be implemented directly or 024 * configured through a PreparedStatementCreatorFactory. 025 * 026 * @param psc object that can create a PreparedStatement given a Connection 027 * If this is null, the SQL will be assumed to contain no bind parameters. 028 * @param rowMapper object that will map one object per row 029 * @return the result Iterator, containing mapped objects 030 * @throws DataAccessException if there is any problem 031 * @see org.springframework.jdbc.core.PreparedStatementCreatorFactory 032 */ 033 <T> CloseableIterator<T> queryForIter(PreparedStatementCreator psc, RowMapper<T> rowMapper) throws DataAccessException; 034 035 /** 036 * Query using a prepared statement, mapping each row to a Java object 037 * via a RowMapper. 038 * <p>A PreparedStatementCreator can either be implemented directly or 039 * configured through a PreparedStatementCreatorFactory. 040 * 041 * @param psc object that can create a PreparedStatement given a Connection 042 * @param pss object that knows how to set values on the prepared statement. 043 * If this is null, the SQL will be assumed to contain no bind parameters. 044 * @param rowMapper object that will map one object per row 045 * @return the result Iterator, containing mapped objects 046 * @throws DataAccessException if there is any problem 047 * @see org.springframework.jdbc.core.PreparedStatementCreatorFactory 048 */ 049 <T> CloseableIterator<T> queryForIter(PreparedStatementCreator psc, PreparedStatementSetter pss, RowMapper<T> rowMapper) 050 throws DataAccessException; 051 052 /** 053 * Execute a query given static SQL, mapping each row to a Java object 054 * via a RowMapper. 055 * <p>Uses a JDBC Statement, not a PreparedStatement. If you want to 056 * execute a static query with a PreparedStatement, use the overloaded 057 * <code>queryForIter</code> method with <code>null</code> as argument array. 058 * 059 * @param sql SQL query to execute 060 * @param rowMapper object that will map one object per row 061 * @return the result Iterator, containing mapped objects 062 * @throws DataAccessException if there is any problem executing the query 063 * @see #queryForIter(String, Object[], RowMapper) 064 */ 065 <T> CloseableIterator<T> queryForIter(String sql, RowMapper<T> rowMapper) throws DataAccessException; 066 067 /** 068 * Execute a query for a result шterator, given static SQL. 069 * <p>Uses a JDBC Statement, not a PreparedStatement. If you want to 070 * execute a static query with a PreparedStatement, use the overloaded 071 * <code>queryForIter</code> method with <code>null</code> as argument array. 072 * <p>The results will be mapped to a Iterator (one entry for each row) of 073 * result objects, each of them matching the specified element type. 074 * 075 * @param sql SQL query to execute 076 * @param elementType the required type of element in the result шterator 077 * (for example, <code>Integer.class</code>) 078 * @return an Iterator of objects that match the specified element type 079 * @throws DataAccessException if there is any problem executing the query 080 * @see #queryForIter(String, Object[], Class) 081 * @see org.springframework.jdbc.core.SingleColumnRowMapper 082 */ 083 <T> CloseableIterator<T> queryForIter(String sql, Class<T> elementType) throws DataAccessException; 084 085 /** 086 * Execute a query for a result iterator, given static SQL. 087 * <p>Uses a JDBC Statement, not a PreparedStatement. If you want to 088 * execute a static query with a PreparedStatement, use the overloaded 089 * <code>queryForIter</code> method with <code>null</code> as argument array. 090 * <p>The results will be mapped to a Iterator (one entry for each row) of 091 * Maps (one entry for each column using the column name as the key). 092 * Each element in the iterator will be of the form returned by this interface's 093 * queryForMap() methods. 094 * 095 * @param sql SQL query to execute 096 * @return an Iterator that contains a Map per row 097 * @throws DataAccessException if there is any problem executing the query 098 * @see #queryForIter(String, Object[]) 099 */ 100 CloseableIterator<Map<String, Object>> queryForIter(String sql) throws DataAccessException; 101 102 /** 103 * Query given SQL to create a prepared statement from SQL and a 104 * PreparedStatementSetter implementation that knows how to bind values 105 * to the query, mapping each row to a Java object via a RowMapper. 106 * 107 * @param sql SQL query to execute 108 * @param pss object that knows how to set values on the prepared statement. 109 * If this is <code>null</code>, the SQL will be assumed to contain no bind parameters. 110 * Even if there are no bind parameters, this object may be used to 111 * set fetch size and other performance options. 112 * @param rowMapper object that will map one object per row 113 * @return the result Iterator, containing mapped objects 114 * @throws DataAccessException if the query fails 115 */ 116 <T> CloseableIterator<T> queryForIter(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper) 117 throws DataAccessException; 118 119 /** 120 * Query given SQL to create a prepared statement from SQL and a list 121 * of arguments to bind to the query, mapping each row to a Java object 122 * via a RowMapper. 123 * 124 * @param sql SQL query to execute 125 * @param args arguments to bind to the query 126 * @param argTypes SQL types of the arguments 127 * (constants from <code>java.sql.Types</code>) 128 * @param rowMapper object that will map one object per row 129 * @return the result Iterator, containing mapped objects 130 * @throws DataAccessException if the query fails 131 * @see java.sql.Types 132 */ 133 <T> CloseableIterator<T> queryForIter(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) 134 throws DataAccessException; 135 136 /** 137 * Query given SQL to create a prepared statement from SQL and a list 138 * of arguments to bind to the query, mapping each row to a Java object 139 * via a RowMapper. 140 * 141 * @param sql SQL query to execute 142 * @param args arguments to bind to the query 143 * (leaving it to the PreparedStatement to guess the corresponding SQL type); 144 * may also contain {@link org.springframework.jdbc.core.SqlParameterValue} objects which indicate not 145 * only the argument value but also the SQL type and optionally the scale 146 * @param rowMapper object that will map one object per row 147 * @return the result Iterator, containing mapped objects 148 * @throws DataAccessException if the query fails 149 */ 150 <T> CloseableIterator<T> queryForIter(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException; 151 152 /** 153 * Query given SQL to create a prepared statement from SQL and a list 154 * of arguments to bind to the query, mapping each row to a Java object 155 * via a RowMapper. 156 * 157 * @param sql SQL query to execute 158 * @param rowMapper object that will map one object per row 159 * @param args arguments to bind to the query 160 * (leaving it to the PreparedStatement to guess the corresponding SQL type); 161 * may also contain {@link org.springframework.jdbc.core.SqlParameterValue} objects which indicate not 162 * only the argument value but also the SQL type and optionally the scale 163 * @return the result List, containing mapped objects 164 * @throws DataAccessException if the query fails 165 */ 166 <T> CloseableIterator<T> queryForIter(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException; 167 168 /** 169 * Query given SQL to create a prepared statement from SQL and a 170 * list of arguments to bind to the query, expecting a result iterator. 171 * <p>The results will be mapped to a Iterator (one entry for each row) of 172 * result objects, each of them matching the specified element type. 173 * 174 * @param sql SQL query to execute 175 * @param args arguments to bind to the query 176 * @param argTypes SQL types of the arguments 177 * (constants from <code>java.sql.Types</code>) 178 * @param elementType the required type of element in the result iterator 179 * (for example, <code>Integer.class</code>) 180 * @return a Iterator of objects that match the specified element type 181 * @throws DataAccessException if the query fails 182 * @see #queryForIter(String, Class) 183 * @see org.springframework.jdbc.core.SingleColumnRowMapper 184 */ 185 <T> CloseableIterator<T> queryForIter(String sql, Object[] args, int[] argTypes, Class<T> elementType) 186 throws DataAccessException; 187 188 /** 189 * Query given SQL to create a prepared statement from SQL and a 190 * list of arguments to bind to the query, expecting a result iterator. 191 * <p>The results will be mapped to an Iterator (one entry for each row) of 192 * result objects, each of them matching the specified element type. 193 * 194 * @param sql SQL query to execute 195 * @param args arguments to bind to the query 196 * (leaving it to the PreparedStatement to guess the corresponding SQL type); 197 * may also contain {@link org.springframework.jdbc.core.SqlParameterValue} objects which indicate not 198 * only the argument value but also the SQL type and optionally the scale 199 * @param elementType the required type of element in the result iterator 200 * (for example, <code>Integer.class</code>) 201 * @return an Iterator of objects that match the specified element type 202 * @throws DataAccessException if the query fails 203 * @see #queryForIter(String, Class) 204 * @see org.springframework.jdbc.core.SingleColumnRowMapper 205 */ 206 <T> CloseableIterator<T> queryForIter(String sql, Object[] args, Class<T> elementType) throws DataAccessException; 207 208 /** 209 * Query given SQL to create a prepared statement from SQL and a 210 * list of arguments to bind to the query, expecting a result iterator. 211 * <p>The results will be mapped to an Iterator (one entry for each row) of 212 * result objects, each of them matching the specified element type. 213 * 214 * @param sql SQL query to execute 215 * @param elementType the required type of element in the result iterator 216 * (for example, <code>Integer.class</code>) 217 * @param args arguments to bind to the query 218 * (leaving it to the PreparedStatement to guess the corresponding SQL type); 219 * may also contain {@link org.springframework.jdbc.core.SqlParameterValue} objects which indicate not 220 * only the argument value but also the SQL type and optionally the scale 221 * @return an Iterator of objects that match the specified element type 222 * @throws DataAccessException if the query fails 223 * @see #queryForIter(String, Class) 224 * @see org.springframework.jdbc.core.SingleColumnRowMapper 225 */ 226 <T> CloseableIterator<T> queryForIter(String sql, Class<T> elementType, Object... args) throws DataAccessException; 227 228 /** 229 * Query given SQL to create a prepared statement from SQL and a 230 * list of arguments to bind to the query, expecting a result iterator. 231 * <p>The results will be mapped to an Iterator (one entry for each row) of 232 * Maps (one entry for each column, using the column name as the key). 233 * Thus Each element in the iterator will be of the form returned by {@code JdbcOperations}' 234 * queryForMap() methods. 235 * 236 * @param sql SQL query to execute 237 * @param args arguments to bind to the query 238 * @param argTypes SQL types of the arguments 239 * (constants from <code>java.sql.Types</code>) 240 * @return an Iterator that contains a Map per row 241 * @throws DataAccessException if the query fails 242 * @see #queryForIter(String) 243 * @see java.sql.Types 244 */ 245 CloseableIterator<Map<String, Object>> queryForIter(String sql, Object[] args, int[] argTypes) throws DataAccessException; 246 247 /** 248 * Query given SQL to create a prepared statement from SQL and a 249 * list of arguments to bind to the query, expecting a result iterator. 250 * <p>The results will be mapped to an Iterator (one entry for each row) of 251 * Maps (one entry for each column, using the column name as the key). 252 * Each element in the iterator will be of the form returned by this interface's 253 * queryForMap() methods. 254 * 255 * @param sql SQL query to execute 256 * @param args arguments to bind to the query 257 * (leaving it to the PreparedStatement to guess the corresponding SQL type); 258 * may also contain {@link org.springframework.jdbc.core.SqlParameterValue} objects which indicate not 259 * only the argument value but also the SQL type and optionally the scale 260 * @return an Iterator that contains a Map per row 261 * @throws DataAccessException if the query fails 262 * @see #queryForIter(String) 263 */ 264 CloseableIterator<Map<String, Object>> queryForIter(String sql, Object... args) throws DataAccessException; 265 }