Saltar al contenido

¿Cuál es la diferencia entre ResultSetExtractor y Rowmapper?

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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *