Spring Ders13 - Database ( Veritabanı ) - JdbcTemplate
Spring frameworkü veri tabanında işlemler yapmayı kolaylaştıran bir frameworktür. Gereksiz ve uzun kodlardan kurtulmanızı sağlar.
Spring JDBC Şablonları
• Fine-grained seviyesindeki şablonlar – JdbcTemplate – NamedParameterJdbcTemplate • Coarse-grained seviyesinde şablonlar – SimpleJdbcTemplate – SimpleJdbcInsert – SimpleJdbcCall • SQL nesneleri – SqlUpdate – MappingSqlQuery |
- spring-jdbc.jar
- spring-tx.jar
Programlama Aşamaları
- applicationContext.xml dosyasında veritabanına erişim bilgilerini içeren DriverManageDataSource beani oluşturulur.
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="system" /> <property name="password" value="oracle" /> </bean> |
- JdbcTemplate beani oluşturulur ve referans olarak oluşturduğumuz veritabanı erişim bilgilerini içeren bean verilir.
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="ds" /> </bean> |
- Veritabanı işlemlerini yukarıdaki şablonlardan "JdbcTemplate" şablonu üzerinden yapacağımızdan veritabanına erişecek sınıfta JdbcTemplate nesnesi ve bu nesnenin setter/getter metotları oluşutulur.
- Veritabanına erişecek sınıftan bir bean oluşturulur ve bu beane yukarda oluşturduğumuz JdbcTemplate sınıfının beani referans olarak verilir.
<bean id="..." class="..."> <property name="..." ref="jdbcTemplate" /> </bean> |
Bu aşamadan sonra JdbcTemplate sınıfının metotlarını bilmemiz gereklidir.
update : Veritabanına kayıt eklemek, kayıt silmek veya kayıt güncellemek için kullanılır. Argüman olarak bir sql sorgusu veya sql sorgusu ile birlikte nesne/nesneler alır. Geriye int tipinde bir sayı döndürür.
- public int update(String query)
- public int update(String query,Object... args)
- public void execute(String query)
Geri dönüş tipi herhangi bir tip olabilir.
- public T execute(String sql, PreparedStatementCallback action)
query : Veritabanındaki kayıtları çekmek (fetch) için kullanılır. 2 metot vardır.
- public T query(String sql, ResultSetExtractor rs)
Bu metot argüman olarak sql sorgu ile birlikte ResultSetExtractor nesnesi alır. Geri dönüş tipi herhangi bir tip olabilir.
- public List query(String sql, RowMapper rm)
Bu metot argüman olarak sql sorgu ile birlikte RowMapper nesnesi alır. Geri dönüş tipi herhangi bir tip olabilir.
Veritabanına veri kaydeden, silen ve güncelleyen ilk programımızı yapalım.
package test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Main { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); BilgiIslem bilgici = (BilgiIslem) context.getBean("bilgiislem"); Personel p1 = new Personel(1, "enes", 3700); Personel p2 = new Personel(2, "cetin", 4700); Personel p3 = new Personel(3, "enescetin", 9700); bilgici.kaydet(p1); bilgici.kaydet(p2); bilgici.kaydet(p3); bilgici.sil(p3); p2.setMaas(9900); bilgici.guncelle(p2); } }
Personel.java
package test; public class Personel { private int id; private int maas; private String ad; public Personel() { } public Personel(int id, String ad, int maas) { this.id = id; this.ad = ad; this.maas = maas; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getMaas() { return maas; } public void setMaas(int maas) { this.maas = maas; } public String getAd() { return ad; } public void setAd(String ad) { this.ad = ad; } }
BilgiIslem.java
package test; import org.springframework.jdbc.core.JdbcTemplate; public class BilgiIslem { private JdbcTemplate jdbcTemplate; public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } public int kaydet(Personel p) { String sorgu = "insert into bilgiislem values(" + p.getId() + ",'" + p.getAd() + "'," + p.getMaas() + ")"; return jdbcTemplate.update(sorgu); } public int sil(Personel p) { String sorgu = "delete from bilgiislem where id=" + p.getId(); return jdbcTemplate.update(sorgu); } public int guncelle(Personel p) { String sorgu = "update bilgiislem set ad='" + p.getAd() + "', maas=" + p.getMaas() + " where id=" + p.getId()+""; return jdbcTemplate.update(sorgu); } }
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" /> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" /> <property name="username" value="system" /> <property name="password" value="****" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="ds"></property> </bean> <bean id="bilgiislem" class="test.BilgiIslem"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans>
test.sql
create table bilgiislem( id int, ad varchar(255), maas int );
Yorumlar
Yorum Gönder