Add since 7.0 tags for stream methods
Build and Deploy Snapshot / Build and Deploy Snapshot (push) Has been cancelled Details
Deploy Docs / Dispatch docs deployment (push) Has been cancelled Details
Build and Deploy Snapshot / Verify (push) Has been cancelled Details

See gh-34623
This commit is contained in:
Juergen Hoeller 2025-03-21 18:44:57 +01:00
parent 8819c749ce
commit 7d5b3892c4
1 changed files with 17 additions and 10 deletions

View File

@ -108,6 +108,7 @@ public abstract class SqlQuery<T> extends SqlOperation {
* but it can be useful for creating the objects of the result list.
* @return a result Stream of objects, one per row of the ResultSet. Normally all these
* will be of the same class, although it is possible to use different types.
* @since 7.0
*/
public Stream<T> stream(Object @Nullable [] params, @Nullable Map<?, ?> context) throws DataAccessException {
validateParameters(params);
@ -130,6 +131,7 @@ public abstract class SqlQuery<T> extends SqlOperation {
* @param params parameters for the query. Primitive parameters must
* be represented by their Object wrapper type. The ordering of parameters is
* significant.
* @since 7.0
*/
public Stream<T> stream(Object... params) throws DataAccessException {
return stream(params, null);
@ -146,6 +148,7 @@ public abstract class SqlQuery<T> extends SqlOperation {
/**
* Convenient method to stream without parameters.
* @param context the contextual information for object creation
* @since 7.0
*/
public Stream<T> stream(Map<?, ?> context) throws DataAccessException {
return stream(null, context);
@ -160,6 +163,7 @@ public abstract class SqlQuery<T> extends SqlOperation {
/**
* Convenient method to stream without parameters nor context.
* @since 7.0
*/
public Stream<T> stream() throws DataAccessException {
return stream(null, null);
@ -262,6 +266,7 @@ public abstract class SqlQuery<T> extends SqlOperation {
* but it can be useful for creating the objects of the result list.
* @return a Stream of objects, one per row of the ResultSet. Normally all these
* will be of the same class, although it is possible to use different types.
* @since 7.0
*/
public Stream<T> streamByNamedParam(Map<String, ?> paramMap, @Nullable Map<?, ?> context) throws DataAccessException {
return queryByNamedParam(paramMap, context, getJdbcTemplate()::queryForStream);
@ -282,11 +287,23 @@ public abstract class SqlQuery<T> extends SqlOperation {
* @param paramMap parameters associated with the name specified while declaring
* the SqlParameters. Primitive parameters must be represented by their Object wrapper
* type. The ordering of parameters is not significant.
* @since 7.0
*/
public Stream<T> streamByNamedParam(Map<String, ? extends @Nullable Object> paramMap) throws DataAccessException {
return streamByNamedParam(paramMap, null);
}
private <R> R queryByNamedParam(Map<String, ?> paramMap, @Nullable Map<?, ?> context, BiFunction<PreparedStatementCreator, RowMapper<T>, R> queryFunction) {
validateNamedParameters(paramMap);
ParsedSql parsedSql = getParsedSql();
MapSqlParameterSource paramSource = new MapSqlParameterSource(paramMap);
String sqlToUse = NamedParameterUtils.substituteNamedParameters(parsedSql, paramSource);
@Nullable Object[] params = NamedParameterUtils.buildValueArray(parsedSql, paramSource, getDeclaredParameters());
RowMapper<T> rowMapper = newRowMapper(params, context);
return queryFunction.apply(newPreparedStatementCreator(sqlToUse, params), rowMapper);
}
/**
* Generic object finder method, used by all other {@code findObject} methods.
* Object finder methods are like EJB entity bean finders, in that it is
@ -407,14 +424,4 @@ public abstract class SqlQuery<T> extends SqlOperation {
*/
protected abstract RowMapper<T> newRowMapper(@Nullable Object @Nullable [] parameters, @Nullable Map<?, ?> context);
private <R> R queryByNamedParam(Map<String, ?> paramMap, @Nullable Map<?, ?> context, BiFunction<PreparedStatementCreator, RowMapper<T>, R> queryFunction) {
validateNamedParameters(paramMap);
ParsedSql parsedSql = getParsedSql();
MapSqlParameterSource paramSource = new MapSqlParameterSource(paramMap);
String sqlToUse = NamedParameterUtils.substituteNamedParameters(parsedSql, paramSource);
@Nullable Object[] params = NamedParameterUtils.buildValueArray(parsedSql, paramSource, getDeclaredParameters());
RowMapper<T> rowMapper = newRowMapper(params, context);
return queryFunction.apply(newPreparedStatementCreator(sqlToUse, params), rowMapper);
}
}