differenza di base è con ResultsetExtractor è necessario scorrere il set di risultati da soli, dicono nel ciclo while. Questa interfaccia fornisce l'elaborazione dell'intero ResultSet in una sola volta. L'implementazione del metodo Interface extractData (ResultSet rs) conterrà quel codice di iterazione manuale.
mentre alcuni gestori di callback come RowCallbackHandler, il metodo di interfaccia processRow (ResultSet rs) loop per te.
RowMapper può essere utilizzato sia per il mapping di ogni riga, sia per l'intera riga.
Per intere righe Oggetto (metodo template jdbcTemplate.query())
public List findAll() {
String sql = "SELECT * FROM EMPLOYEE";
return jdbcTemplate.query(sql, new EmployeeRowMapper());
}
without casting will work
per oggetto individuale (con metodo Template 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;
}
}
Best Use cases:
Mappatore riga: Quando ogni riga di un ResultSet si associa a un oggetto dominio, può essere implementata come classe interna privata.
RowCallbackHandler: Quando nessun valore viene restituito dal metodo di callback per ogni riga, ad es. scrivere una riga su un file, convertire le righe in un XML, Filtrare le righe prima di aggiungere alla raccolta. Molto efficiente come ResultSet alla mappatura degli oggetti non è fatto qui.
ResultSetExtractor: Quando più righe di ResultSet si associano a un singolo oggetto.Come quando si eseguono join complessi in una query, potrebbe essere necessario avere accesso all'intero ResultSet invece della singola riga di rs per creare oggetti complessi e si desidera assumere il controllo completo di ResultSet. Come mappare le righe restituite dal join di TABLE1 e TABLE2 a un aggregato TABLE completamente ricostituito.
ParameterizedRowMapper viene usato per creare oggetti complessi
A mio parere, RowMapper è molto più semplice e probabilmente finirà per usarlo piuttosto che ResultSetExtractor. Per ulteriori informazioni, consultare [JavaDoc] (http://static.springsource.org/spring/docs/3.0.0.RC1/javadoc-api/) e la [Documentazione] (http: //static.springsource. org/spring/docs/2.5.x/reference/jdbc.html) – Zack