2012-10-09 27 views
5

Veritabanından veri almak için ResultSetExtractor nasıl kullanılır? Burada arka uç olarak Oracle 10g kullanıyorum. Çalışan Tablodan Çalışan detaylarının aranması durumunda hangisinin ResultSetExtractor veya RowMapper'u kullanması daha iyidir? Yay jdbc üzerinde iyi bir makale vardırYay SonucuSetExtractor

cevap

2

, check this

takiben örnek kullanım şöyledir:
PersonResultSetExtractor sınıfı:

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

Teşekkürler cevap için teşekkürler. Oldukça kullanışlı. –

+0

Ayrıca sadece 'ResultSetExtractor' kullanarak bir yol daha bulabilirim. Not burada –

+2

İmleci ilk satırdan önce konumlandırıldığı için rs.next() öğesini çağırmayı unutmayın. –

0

Daha basit bir örnek:

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

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

biri de java 8 yana satır haritalama rutin olarak kapanışları (lambda'lar) kullanabilirsiniz:

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); 

İlk yöntem param senin sorgu, ikinci - senin mapper - Kişi (String, String) Yapıcı gereklidir . "first_name", "last_name" db sütun adlarıdır. Üçüncü olarak - id için arg, daha fazla param koyabilirsiniz bir vararg var.