2012-10-09 9 views
5

Jak używać ResultSetExtractor do pobierania danych z bazy danych? tutaj używam wyroczni 10g jako zaplecza. W przypadku przeszukania danych pracownika z Tabeli pracowników, który lepiej jest użyć ResultSetExtractor lub RowMapper?Spring ResultSetExtractor

Odpowiedz

2

Jest dobry artykuł na wiosnę JDBC, check this

Po to jest korzystanie z przykładów:
klasa 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

dzięki za odpowiedź ur. Jest to całkiem przydatne. –

+0

Również znajduję jeszcze jeden sposób, używając tylko 'ResultSetExtractor'.Code jest tutaj –

+2

Nie zapomnij wywołać rs.next(), ponieważ kursor jest początkowo umieszczony przed pierwszym wierszem. –

0

Prostszy przykład:

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

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

Można również użyć zamknięć (lambda) jako odwzorowania rząd rutyny od Javy 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); 

Pierwsza metoda param jest zapytanie, drugi - Twój odwzorowujący - Osoba (String, String) potrzebna jest konstruktor . "first_name", "last_name" to nazwy kolumn db. Po trzecie - arg dla id, jest to vararg, w którym można umieścić więcej params.

Powiązane problemy