2012-10-09 26 views
5

Cómo utilizar ResultSetExtractor para recuperar datos de la base de datos? aquí estoy usando Oracle 10g como back-end. En caso de buscar los datos del empleado en la tabla de empleados, ¿cuál es mejor usar ResultSetExtractor o RowMapper?Spring ResultSetExtractor

Respuesta

2

Hay un buen artículo sobre JDBC primavera, check this

siguiente es el ejemplo de uso:
clase PersonResultSetExtractor:

package dao.mapper; 

import java.sql.ResultSet; 
import java.sql.SQLException; 

import org.springframework.jdbc.core.ResultSetExtractor; 

import domainmodel.Person; 

public class PersonResultSetExtractor implements ResultSetExtractor { 

    @Override 
    public Object extractData(ResultSet rs) throws SQLException { 
    Person person = new Person(); 
    person.setFirstName(rs.getString(1)); 
    person.setLastName(rs.getString(2)); 
    return person; 
    } 

} 

RowMapper:

package dao.mapper; 

    import java.sql.ResultSet; 
    import java.sql.SQLException; 

    import org.springframework.jdbc.core.RowMapper; 

    public class PersonRowMapper implements RowMapper { 

     @Override 
     public Object mapRow(ResultSet rs, int line) throws SQLException { 
     PersonResultSetExtractor extractor = new PersonResultSetExtractor(); 
     return extractor.extractData(rs); 
     } 

    } 
+0

gracias por su respuesta. Es bastante útil. –

+0

También encuentro una forma más utilizando solo 'ResultSetExtractor'. El código está aquí –

+2

No olvide llamar a rs.next(), porque el cursor está inicialmente posicionado antes de la primera fila. –

0

Un ejemplo más sencillo:

MyDataStructure result = jdbcTemplate.query(sql, new ResultSetExtractor<MyDataStructure>() { 

    @Override 
    public MyDataStructure extractData(final ResultSet rs) throws ... { 
    // collect data from rs here ... 
    return myData; 
    } 
}); 
0

Uno puede también utilizar cierres (lambdas) como rutina de mapeo consecutivas desde java 8:

String sql = "select first_name, last_name from PERSON where id = ?"; 

public Person jdbcTemplate.query(sql,(rs)->{return new Person(rs.getString("first_name"), rs.getString("last_name"));}, int id); 

primer parámetro método es la consulta, segundos - (String, String) Se necesita persona constructor - el asignador . "first_name", "last_name" son los nombres de la columna db. Tercero: el argumento para la identificación, es una vararg donde puedes poner más params.

Cuestiones relacionadas