JdbcTemplate queryForStream Example Spring 5.3

DataClassRowMapper Example

The following example uses Spring 5.3’s new DataClassRowMapper which can automatically instantiate a new instance of the specified target class.

@Autowired
JdbcTemplate jdbcTemplate;

private String SQL_QUERY = "SELECT make, model FROM vehicles";

// Example using DataClassRowMapper
Stream<Vehicle> stream = jdbcTemplate.queryForStream(
        SQL_QUERY,
        new DataClassRowMapper<Vehicle>());

RowMapper Lambda Example

The following example uses Java’s lambda implementation of the RowMapper to map the resultSet to a target constructor.

@Autowired
JdbcTemplate jdbcTemplate;

private String SQL_QUERY = "SELECT make, model FROM vehicles";

// Example using RowMapper Lambda
Stream<Vehicle> stream = jdbcTemplate.queryForStream(
        SQL_QUERY,
        (rs, rowNum) -> new Vehicle(
            rs.getString("make"),
            rs.getString("model")));

Example of QueryForStream using a Prepared Statement

The following is an example of how to use the DataClassRowMapper with a prepared statement using a jdbcTemplate.

@Autowired
JdbcTemplate jdbcTemplate;

// Example using a Prepared Statement
Stream<Vehicle> stream = jdbcTemplate.queryForStream(
        "SELECT make, model FROM vehicles WHERE make = ?",
        new DataClassRowMapper<Vehicle>(),
        "FORD");

Full source code of examples

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.DataClassRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;

import java.util.stream.Stream;

public class JdbcTemplateStreamExample {

    @Autowired
    JdbcTemplate jdbcTemplate;

    private String SQL_QUERY = "SELECT make, model FROM vehicles";

    public void example() {
        // Example using DataClassRowMapper
        Stream<Vehicle> streamA = jdbcTemplate.queryForStream(
                SQL_QUERY,
                new DataClassRowMapper<Vehicle>());

        // Example using RowMapper Lambda
        Stream<Vehicle> streamB = jdbcTemplate.queryForStream(
                SQL_QUERY,
                (rs, rowNum) -> new Vehicle(
                    rs.getString("make"),
                    rs.getString("model")
                ));

        // Example using a Prepared Statement
        Stream<Vehicle> streamC = jdbcTemplate.queryForStream(
                "SELECT make, model FROM vehicles WHERE make = ?",
                new DataClassRowMapper<Vehicle>(),
                "FORD");
    }

    static protected class Vehicle {

        private String make;
        private String model;

        public Vehicle(String make, String model) {
            this.make = make;
            this.model = model;
        }
    }
}