Sansür, bir toplumun kendine olan güvensizliğini yansıtır ve otoriter rejimlerin belirgin bir özelliğidir.

--Potter Stewart

1.02.2008

Spring JDBC Kalıplarının (Templates) Kullanımı

Hibernate, iBATIS, JPA, vb. veri erişim teknolojilerinin sağladığı artılar bir yana bırakıp veri tabanına daha alt düzey erişimlerde bulunmak için JDBC tercihi yapılabilir. JDBC soyutlaması için Spring üç ayrı kalıp sınıfı sunmaktadır:


  • JdbcTemplate (parametreleri indeks değerleri ile atama)

  • NamedParameterJdbcTemplate (parametreleri isimlerle atama)

  • SimpleJdbcTemplate (Java 5 için)



JdbcTemlate Kullanımı


JdbcTemplate bean tanımını şu şekilde yazılır:


<bean id="jdbcTemplate"

class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource">

<ref local="dataSource" />

</property>

</bean>


dataSource tanımlama ve Spring’in veri erişim katmanı için sunduğu desteğe şu blog girdisinde bahsetmiştik. Dao sınıfımız da JdbcDaoSupport sınıfını kalıtmalıdır:


public class OgrenciDaoImpl extends JdbcDaoSupport

implements OgrenciDao{

...

}




Dao sınıfımıza bağımlılık aktarımı ile jdbcTemplate bağlayalım:


<bean id="ogrenciDao" class="dao.OgrenciDao">

<property name="jdbcTemplate" ref="jdbcTemplate" />

</bean>



Veri Tabanına JdbcTemlate ile Kayıt Ekleme:


private static final String OGRENCI_INSERT =

"insert into ogrenci (id, ad, soyad) " +

"values (?,?,?)";


public void saveOgrenci(Ogrenci ogrenci) {

getJdbcTemplate().update(OGRENCI_INSERT,

new Object[] { ogrenci.getId(), ogrenci.getAd(),

ogrenci.getSoyad() });

}



Veri Tabanından JdbcTemlate ile Kayıt Sorgulama


private static final String OGRENCI_SELECT =

"select id, ad, soyad from ogrenci";


private static final String OGRENCI_BY_ID_SELECT =

OGRENCI_SELECT + " where id=?";


public Ogrenci getOgrenciById(long id) {

List matches = getJdbcTemplate().query(OGRENCI_BY_ID_SELECT,

new Object[] { Long.valueOf(id) },

new RowMapper() {

public Object mapRow(ResultSet rs, int rowNum)

throws SQLException, DataAccessException {

Ogrenci ogrenci = new Ogrenci();

ogrenci.setId(rs.getInt(1));

ogrenci.setAd(rs.getString(2));

ogrenci.setSoyad(rs.getString(3));

return ogrenci;

}

});

return matches.size() > 0 ? (Ogrenci) matches.get(0) : null;

}



Burada sorgudan dönen her sıra için JdbcTemplate, RowMapper sınıfının mapRow() yöntemini işletecektir.



NamedParameterJdbcTemplate Kullanımı


NamedParameterJdbcTemplate için yapılması gereken bean tanımları ve örnekler şu şekildedir:


<bean id="jdbcTemplate"

class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">

<property name="dataSource">

<ref local="dataSource" />

</property>

</bean>



public class OgrenciDaoImpl extends NamedParameterJdbcDaoSupport

implements OgrenciDao{

...



private static final String OGRENCI_INSERT =

"insert into ogrenci (id, ad, soyad) " +

"values (:id, :ad, :soyad)";




public void saveOgrenci(Ogrenci ogrenci) {

Map parameters = new HashMap();

parameters.put("id", ogrenci.getId());

parameters.put("password", ogrenci.getAd());

parameters.put("firstName", ogrenci.getSoyad());

getNamedParameterJdbcTemplate().update(OGRENCI_INSERT, parameters);

}


...


}


SimpleJdbcTemplate Kullanımı


Java 5’in getirdiği autoboxing, değişken sayıda parametre geçebilme gibi yenilikleri kullanan SimpleJdbcTemplate için yapılması gereken bean tanımları ve örnekler şu şekildedir:


<bean id="jdbcTemplate"

class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">

<property name="dataSource" ref="dataSource" />

</bean>



public class OgrenciDaoImpl extends SimpleJdbcDaoSupport

implements OgrenciDao{

...


public void saveOgrenci(Ogrenci ogrenci) {

getSimpleJdbcTemplate().update(OGRENCI_INSERT,

ogrenci.getId(), ogrenci.getAd(),

ogrenci.getSoyad());

}



public Ogrenci getOgrenciById(long id) {

List<Ogrenci> matches = getSimpleJdbcTemplate().query(

OGRENCI_BY_ID_SELECT,

new ParameterizedRowMapper<Ogrenci>() {

public Ogrenci mapRow(ResultSet rs, int rowNum)

throws SQLException {

Ogrenci ogrenci = new Ogrenci();

ogrenci.setId(rs.getInt(1));

ogrenci.setAd(rs.getString(2));

ogrenci.setSoyad(rs.getString(3));

return ogrenci;

}

},

id

);

return matches.size() > 0 ? matches.get(0) : null;

}


...

}



Hiç yorum yok:

Yorum Gönder