Basta ya de buscar por todo internet porque estás al espacio perfecto, tenemos la solución que quieres hallar sin problema.
Solución:
La diferencia básica es que con ResultsetExtractor necesitará iterar a través del conjunto de resultados usted mismo, digamos en el ciclo while. Esta interfaz le proporciona el procesamiento de todo el ResultSet a la vez. La implementación del método de interfaz extractData(ResultSet rs) contendrá ese código de iteración manual. Ver una implementación de ResultsetExtractor
mientras que algunos controladores de devolución de llamada como RowCallbackHandler, el método de interfaz processRow(ResultSet rs) realiza un bucle por usted.
RowMapper se puede usar para mapear cada fila o filas completas.
Para filas enteras Objeto (por método de plantilla jdbcTemplate.query())
public List findAll()
String sql = "SELECT * FROM EMPLOYEE";
return jdbcTemplate.query(sql, new EmployeeRowMapper());
without casting will work
Para objeto individual (con el método Plantilla jdbcTemplate.queryForObject())
@SuppressWarnings( "unchecked", "rawtypes" )
public Employee findById(int id)
String sql = "SELECT * FROM EMPLOYEE WHERE ID = ?";
// jdbcTemplate = new JdbcTemplate(dataSource);
Employee employee = (Employee) jdbcTemplate.queryForObject(sql, new EmployeeRowMapper(), id );
// Method 2 very easy
// Employee employee = (Employee) jdbcTemplate.queryForObject(sql, new Object[] id , new BeanPropertyRowMapper(Employee.class));
return employee;
@SuppressWarnings("rawtypes")
public class EmployeeRowMapper implements RowMapper
public Object mapRow(ResultSet rs, int rowNum) throws SQLException
Employee employee = new Employee();
employee.setId(rs.getInt("ID"));
employee.setName(rs.getString("NAME"));
employee.setAge(rs.getInt("AGE"));
return employee;
Mejores casos de uso:
Mapeador de filas: Cuando cada fila de un ResultSet se asigna a un objeto de dominio, se puede implementar como una clase interna privada.
Controlador de devolución de llamada de fila: Cuando no se devuelve ningún valor del método de devolución de llamada para cada fila, por ejemplo, escribiendo una fila en un archivo, convirtiendo filas a XML, filtrando filas antes de agregarlas a la colección. Muy eficiente ya que el mapeo de ResultSet a Object no se realiza aquí.
Extractor de conjunto de resultados: Cuando varias filas de ResultSet se asignan a un solo objeto. Al igual que cuando se realizan uniones complejas en una consulta, es posible que se deba tener acceso a todo el conjunto de resultados en lugar de una sola fila de rs para crear un objeto complejo y desea tomar el control total de ResultSet. Como Mapear las filas devueltas de la unión de TABLE1 y TABLE2 a un agregado de TABLE completamente reconstituido.
Mapeador de filas parametrizado se utiliza para crear objetos complejos
JavaDoc de ResultSetExtractor
:
Esta interfaz se utiliza principalmente dentro del propio marco JDBC. Un RowMapper suele ser una opción más sencilla para el procesamiento de ResultSet, asignando un objeto de resultado por fila en lugar de un objeto de resultado para todo el ResultSet.
ResultSetExtractor
Se supone que extraer todo ResultSet
(posiblemente varias filas), mientras que RowMapper
se alimenta con fila a la vez.
La mayoría del tiempo, ResultSetExtractor
hará un bucle en el ResultSet
y use RowMapper
, fragmento de ejemplo de Spring RowMapperResultSetExtractor
:
List results = (this.rowsExpected > 0 ? new ArrayList(this.rowsExpected) : new ArrayList());
int rowNum = 0;
while (rs.next())
results.add(this.rowMapper.mapRow(rs, rowNum++));
return results;
Preste atención, TODOS los resultados se transformarán, esto puede crear una excepción de falta de memoria.
Ver también
RowMapperResultSetExtractor