17 Temmuz 2023 Pazartesi

SpringData Jdbc JdbcTemplate.query metodu - SQL + RowMapper

Giriş
En kolay ve nen çok kullanılan metodlardan birisi bu. Girdi olarak bir sql cümlesi ve RowMapper nesnesi alır ve List döner. Basit Select cümleler içindir. 

- RowMapper ne tipten bir nesne döndürüleceğini belirtir. Eğer özel bir sonuç nesnesi kodlamak istemiyorsak RowMapper Map<String,String> bile döndürebilir.

Örnek
Şöyle yaparız. Burada RowMapper bir User nesnesi döndürüyor.
List<User> users = jdbcTemplate.query("SELECT * FROM USER", new UserRowMapper());
Örnek
Şöyle yaparız.. Burada RowMapper bir Foo nesnesi döndürüyor.
public List<Foo> getAgateCounts(){
  String sql = "select counts, flag, feed_id from cd_product_reg_stage";
  return jdbcTemplate.query(sql, new InnerMapper());
}
static final class InnerMapper implements RowMapper<Foo> { 
  @Override
  public Foo mapRow(ResultSet rs,int rowNumber) throws SQLException{
    Foo obj = new Foo();
    obj.setCounts(rs.getLong("counts"));
    obj.setProcessed_flag(rs.getString("flag"));
    obj.setFeed_id(rs.getLong("feed_id")); 
    return obj;
  }
}
Örnek
Şöyle yaparız. Burada RowMapper bir Student nesnesi döndürüyor.
String SELECT_ALL_STUDENTS = "SELECT Student_id, Name, Address, Info FROM Students";

public List<Student> getAllStudents(){
  
  return jdbcTemplate.query(SELECT_ALL_STUDENTS, new RowMapper<Student>() { 
    @Override
public Student mapRow(ResultSet resultSet, int rowNumber) throws SQLException { int studentId = resultSet.getInt("Student_id "); String studentName = resultSet.getString("Name"); String studentAddress= resultSet.getString("Address"); String studentInfo= resultSet.getString("Info"); return new Student(studentId, studentName, studentAddress, studentInfo); } }); }
Örnek
Şöyle yaparız. Burada RowMapper olarak lambda kullanılıyor bir Tenant  nesnesi döndürüyor.
String query = "SELECT name, id FROM tenant";

List<Tenant> tenants = jdbcTemplate.query(query, (resultSet, rowNumber) -> {
  UUID id = UUID.fromString(resultSet.getString("id"));
  String name = resultSet.getString("name");
  return new Tenant(id, name);
});

Hiç yorum yok:

Yorum Gönder