2012-10-09 7 views
5

Wie man ResultSetExtractor benutzt, um Daten von der Datenbank abzurufen? Hier verwende ich Orakel 10g als Back-End. Im Falle der Suche nach einem Mitarbeiter Details aus Employee Tabelle welche besser ist zu verwenden ResultSetExtractor oder RowMapper?Frühling ResultSetExtractor

Antwort

2

Es ist ein guter Artikel auf Frühling jdbc, check this

Folgenden sehen Sie die Beispiel-Anwendung:
PersonResultSetExtractor Klasse:

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

danke für deine antwort. Es ist sehr nützlich. –

+0

Ich finde auch einen weiteren Weg, indem ich nur 'ResultSetExtractor' verwende. Code ist hier –

+2

Vergiss nicht, rs.next() aufzurufen, weil der Cursor anfänglich vor der ersten Zeile steht. –

0

Ein einfacheres Beispiel:

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

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

Man kann auch Verschlüsse verwendet (Lambda) als Zeilenabbildungsroutine seit 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); 

Erste Methode param die Abfrage ist, Sekunde - Ihr Mapper - Person (String, String) Konstruktor benötigt wird . "first_name", "last_name" sind die Namen der Datenbankspalten. Drittens - der Arg für die ID, es ist ein Vararg, wo Sie mehr Params setzen können.