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


Veritabanı işlemleri yapabilmek için standart .jar dosyalarına ek olarak sahip olunması gereken .jar dosyaları
  • 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)
    execute :  DDL sorgu çalıştırmak için kullanılır (Tablo oluşturma vs.). Argüman olarak sql sorgu alır. Geriye bir şey döndürmez.
    • public void execute(String query)
    Diğer bir execute metot ise sql sorgu yanında PreparedStatementCallback tipinde bir argüman alır.
    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.

    Main.java
    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
    );
    

    spring database

    Yorumlar

    Bu blogdaki popüler yayınlar

    Java SE Ders24 - Composition (Kompozisyon)

    Spring Ders20 - Aspect Oriented Programming - AspectJ Annotation Style

    JSF Ders30 - Page Template (Sayfa Şablonu)