14 Haziran 2023 Çarşamba

SpringData Jdbc JdbcTemplate.queryForObject metodu

1. queryForObject metodu - sql + Object[] + RowMapper
İmzası şöyle
@Deprecated
@Override
Nullable
public <T> T queryForObject(String sql, @Nullable Object[] args,
  RowMapper<T> rowMapper) throws DataAccessException {
Açıklaması şöyle. Tek bir sonuç nesnesi dönmeli, yoksa IncorrectResultSizeDataAccessException fırlatır
IncorrectResultSizeDataAccessException - if the query does not return exactly one row, or does not return exactly one column in that row
RowMapper arayüzü ile kullanılır. RowMapper ve ParameterizedRowMapper sınıfları sorgu sonuçlarını nesneye çevirmek için kullanılır. Spring'in sağladığı BeanPropertyRowMapper ile de kullanılabilir.

Örnek
Şöyle yaparız
String sql = "SELECT * FROM users WHERE email = ?";
User user = jdbcTemplate.queryForObject(
  sql,
  new Object[]{email},
  new BeanPropertyRowMapper<>(User.class));

Örnek
Eğer döndürülen nesne tek bir sütun ise RowMapper olmadan kullanılır.  Select Name From Employee Where ID = ? sorgusu bir String yani nesne döndürür.

Örnek
Şöyle yaparız.
public Person findById(Integer id) {
  return this.template.queryForObject(this.findByIdSql, new Object[]{id},
    this.personRowMapper);
}
IncorrectResultSizeDataccessException 
Eğer veri tabanı boş sonuç dönerse exception fırlatır. Bunu yakalamak gerekir. 
Örnek
Şöyle yaparız
public Optional<User> findById(Integer id) {
  try {
   return Optional.ofNullable(jdbcTemplate
    .queryForObject("SELECT * FROM users WHERE id=?", userMapper,id)):
  } catch (IncorrectResultSizeDataccessException e) {
   return Optional.empty();
  }
}

Hiç yorum yok:

Yorum Gönder