8 Kasım 2020 Pazar

SpringData Jdbc JdbcTemplate.query metodu

Giriş
Bu metodun çok fazla overload edilmiş hali var. Bu yüzden kendi başına bir yazı yapmaya karar verdim. 
- query() metodu her zaman bir List döndürmüyor. Bu yüzden queryForList() metodu tercih edilebilir.
- query() metodunun tam 19 tane overload edilmiş hali var. Kullanımı karışık.
- query() metodunun ResultSetExtractor, RowCallbackHandler, RowMapper alan overload edilmiş halleri var. 

1. RowMapper kullanan metodlar bir List dönerler. Yani RowMapper sadece bir Object döner. Spring bunu List haline getirir.
2. ResultSetExtractor kullanan metodlar ne tipten veri yapısı (Colleciton) döneceklerini kendileri belirtirler. Açıklaması şöyle
JdbcTemplate allows us to translate the SQL result directly into an object or a list of objects by using the RowMapper or ResultSetExtractor interface.

query metodu - sql + RowMapper

query metodu - sql + args + RowMapper
Parametre ile kullanılan basit Select cümleleri içindir. 
Örnek ver

query metodu - sql + ResultSetExtractor
İmzası şöyle
public <T> T query(final String sql, final ResultSetExtractor<T> rse)
Örnek
Şöyle yaparız
jdbcTemplate.query(
  "SELECT id, name, email FROM users",
  (rs, rowNum) -> new User(rs.getLong("id"), rs.getString("name"), rs.getString("email"))
).forEach(user -> System.out.println(user.getName()));

query metodu - sql + args + ResultSetExtractor
İmzası şöyle
@Deprecated
@Override
@Nullable
public <T> T query(String sql, @Nullable Object[] args, ResultSetExtractor<T> rse)
Örnek
Şöyle yaparız.
List<Foo> list = 
fdbcTemplate.query(sql, mapParameters, new ResultSetExtractor<List<DataList>>() {

  @Override
  public List<Foo> extractData(ResultSet r) throws SQLException, DataAccessException {
    List<Foo> list = new ArrayList<Foo>();
    Foo foo  = null;
    while(r.next()) {
        foo  = new Foo();
        foo.setName(r.getString("cName"));
        list.add(foo);
    }
    return list;
    }
});



Hiç yorum yok:

Yorum Gönder