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
5
A
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
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.
danke für deine antwort. Es ist sehr nützlich. –
Ich finde auch einen weiteren Weg, indem ich nur 'ResultSetExtractor' verwende. Code ist hier –
Vergiss nicht, rs.next() aufzurufen, weil der Cursor anfänglich vor der ersten Zeile steht. –