diferencia básica es con ResultsetExtractor tendrá que recorrer el conjunto de resultados a sí mismo, por ejemplo en el bucle 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. See one implementation of ResultsetExtractor
mientras que algunos manejadores de devolución de llamada como RowCallbackHandler, la processRow método de interfaz (ResultSet rs) Bisagras para usted.
RowMapper se puede utilizar para mapear cada fila o filas enteras.
Para filas enteras de objeto (por el 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 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:
Asignador de filas: Cuando cada fila de un ResultSet se asigna a un objeto de dominio, puede implementarse como clase interna privada.
RowCallbackHandler: Cuando no se devuelve ningún valor del método de devolución de llamada para cada fila, p. escribiendo una fila en un archivo, convirtiendo filas en un XML, Filtrando filas antes de agregar a la colección. Muy eficiente como el mapeo ResultSet to Object no se hace aquí.
ResultSetExtractor: Cuando varias filas de ResultSet se asignan a un solo objeto.Al igual que cuando se realizan combinaciones complejas en una consulta, es posible que se necesite tener acceso a ResultSet completo en lugar de una sola fila de rs para compilar Object complejo y se desea tener el control total de ResultSet. Me gusta Asignar las filas devueltas desde la combinación de TABLE1 y TABLE2 a un agregado de TABLE totalmente reconstituido.
ParameterizedRowMapper se utiliza para crear objetos complejos
En mi opinión, RowMapper es mucho más simple y probablemente terminará utilizándolo en lugar de ResultSetExtractor. Pero para obtener más información, consulte el [JavaDoc] (http://static.springsource.org/spring/docs/3.0.0.RC1/javadoc-api/) y la [Documentación] (http: //static.springsource. org/spring/docs/2.5.x/reference/jdbc.html) – Zack