Monthly Archives: April 2006

C# 3.0 Yenilikleri

C# 3.0 da kod yazımını kolaylaştırmak için bir çok yeni özellik eklenecek. Özellikle iyi bir IDE kullanmayan yazılımcıların ağzını sulandırabilecek bu özelliklerden en çarpıcı olanı bence Lamda ve Sorgu İfadeleri (SQL & XQuery) Read more »

Dot Net ile T.C. Kimlik Sorgulama

Delphi de WSDL Importer sihirbazı ile web servislerini kullanabilmek için gerekli kodu üretip projemizde kullanabiliyorduk. Benzer bir araç .Net Framework içinde de mevcut.

Adı wsdl.exe ve kullanımı da çok basit. Parametre olarak sadece adresi geçiyorsunuz.

wdsl http://tckimlik.nvi.gov.tr/kpspublic.asmx?WSDL

Sonuçta KPSPublicWebService.cs adıyla bir dosya elde ediyosunuz. Bunu projeye eklemeniz yeterli.

KPSPublicWebService ws = new KPSPublicWebService();
String tckimlikno = edtTCKimlikNo.Text;
TCKimlikNoDogrulamaSonucu sonuc = ws.TCKimlikNoDogrula(95464647544);

hbm2ddl

Ant Script içinde taskdef ile yeni bir görev olarak belittiğiniz hibernatetool taginin içersinde kullanabileceğiniz altgörevlerden birinin adı hbm2ddl. Adı ise ne yaptığını açıklamaya yetiyor: HBM dosyalarını kullanarak bir DDL script oluşturmak.

build.xml scriptine aşağıdaki eklemeyi yapıp

<hibernatetool destdir="src">
   <configuration configurationfile="src/hibernate.cfg.xml">
     <fileset dir="src">
    <include name="*.hbm.xml"/>
 </fileset>
   </configuration>
   <hbm2ddl 
      create="true" 
      update="true" 
      format="true" 
      outputfilename="ddl.sql" 
      delimiter=";" />
</hibernatetool>

çalıştırdığımızda console’da şöyle bir sonuç almamız lazım.

Buildfile: C:eclipse32workspaceHibernateTestbuild.xml
default:
[hibernatetool] Executing Hibernate Tool with a Standard Configuration
[hibernatetool] 1. task: hbm2ddl (Generates database schema)
[hibernatetool] create table Musteri (ID integer not null, AD varchar(20), SOYAD varchar(20), YAS integer, primary key (ID))
BUILD SUCCESSFUL
Total time: 4 seconds

Gördüğünüz gibi, Musteri tablosunun DDL bizim için hazırlandı.

Ant Script

Eclipse içinde zaten Ant Script editörü mevcut. Tek yapmanız gereken build.xml adıyla bir dosya oluşturmak ve içeriğini şu şekilde belirlemek:

<?xml version="1.0"?>
<project name="project" default="default">
    <property name="hibernate.path" location="c:/eclipse32/hibernate"/>
    <property name="jaybird.path" location="c:/eclipse32/jaybird"/>
    <taskdef 
        name="hibernatetool" 
        classname="org.hibernate.tool.ant.HibernateToolTask">
        <classpath>
            <fileset dir="${hibernate.path}">
                <include name="*.jar"/>
                    <include name="lib/*.jar"/>
                    <include name="tools/*.jar"/>
            </fileset>
            <fileset dir="${jaybird.path}">
                <include name="*.jar"/>
            </fileset>
        </classpath>
    </taskdef>
    <target name="default" description="açıklama">
        <hibernatetool destdir="src">
            <configuration configurationfile="src/hibernate.cfg.xml">
                <fileset dir="src">
                    <include name="*.hbm.xml"/>
                </fileset>
            </configuration>
        </hibernatetool>
    </target>
</project>

Bu script dosyasını çalıştırmak için üzerine tıklayın Run As > Ant Build... seçeneğini veya editör açıkken Alt+Shift+X,Q kısayol tuşlarını kullanabilirsiniz.

Hibernate Tools ile ilgili detaylı açıklama ve bir el kitabı hibernate.org adresinde mevcut. O yüzden detaylara girmeyeceğim şimdilik.

Kurulum

Hibernate Tools, eclipse’e plugin olarak hazırlanmış olarak dağıtılıyor. Yani zip dosyası içindeki klasörleri eclipse’in içine kopyaladığınız zaman bu pluginleri kullanmaya başlayabilirsiniz. Ben Ant Script yoluyla bu araçları kullanmayı daha pratik buluyorum o yüzden bir build.xml dosyası hazırlamamız gerekecek. Bunu yapmadan önce indirdiğiniz zip doyasının içinde bulunan pluginsorg.hibernate.eclipse_3.1.0.beta4libtools klasörünün içindeki tüm jar dosyalarını hibernate’i kurduğunuz klasörün içine tools diye bir klasör altına kopyalayın.

Hibernate Tools

Şu ana kadar bir java sınıfı, bir veritabanı tablosu ve bir de bunları eşleyen Mapping Doyası (*.hbm.xml) dosyası oluşturduk. Tanım modelimizi (Domain model) geliştirdikçe veya değiştirdikçe tek tek bütün bu dosyalara uygulamamız gerekecek. Bu işlem çok vakit alır ve zaman kaybına neden olur.

Hibernate için hazırladığımız eşleme dosyaları tamamen java sınıfı odaklıdır. Yani bu dosyaları tasarlarken hep java tarafından düşünmeliyiz. Veri tabanı ise sadece bunları saklamak için gerekli ve yeni bir model hazırlarken önemli değildir. İşte bu noktada Hibernate bize Hibernate Tools adıyla bir takım araçlar sunuyor. Bu araçları kullanarak eşleme dosyalarından DDL ve Java sınıflarını otomatik olarak oluşturabilirsiniz.

Kayıtları listelemek

Kod yazarak kayıtları listelemek istiyorsanız: Session sınıfının createQuery metodunu kullanmanız gerekir. Aşağıdaki örneği inceleyin.

import java.util.Iterator;
import java.util.List;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.classic.Session;</code>

public class Test1 
{
  public static void main(String[] args) 
  {
    Configuration conf = new Configuration();
    conf.addResource("Musteri.hbm.xml");
    SessionFactory sessionFactory = conf.configure().buildSessionFactory();
    Session session = sessionFactory.openSession();
    List list = session.createQuery("from Musteri").list();
    for (Iterator iter = list.iterator(); iter.hasNext();) 
    {
      Musteri musteri = (Musteri) iter.next();
      System.out.print(musteri.getId()+" ");
      System.out.print(musteri.getAd()+" ");
      System.out.print(musteri.getSoyad()+" ");
      System.out.println(musteri.getYas()+" ");
    }
    session.close();
  }
}

Dikkat ettiyseniz createQuery metodundan sonra list metodunu çağırıyoruz ve sonuç olarak da bize bir List arayüzü (interface) döndürülüyor. Tercihinize göre array(), iterator() metodlarını da kullanabilirsiniz. Eğer dönen kayıtlar üzerinde bir ileri bir geri gidebilmek istiyorsanız scroll() metodunu kullanın.

Parametreli sorgular da hazırlamanız mümkün. Örneğin:

List list = session.createQuery("from Musteri where yas &gt; :yas")
.setInteger("yas", 25)
.list();

Kayıt girmek

Hibernate mapping açıklamalarına ve örneklerine girmeden hibernate’in neler yapabileceğine dair küçük bir fikriniz olması için küçük bir örnek yazalım.

Öncelikle, yapılandırmada belirttiğimiz veritabanına bağlanıp bir tablo oluşturalım.

create table MUSTERI (
   id integer not null primary key,
   ad varchar(20),
   soyad varchar(20),
   yas smallint 
);

Tablomuzdaki her kayıt bir java sınıfına denk geleceği için Musteri adıyla bir java sınıfı oluşturmamız gerekiyor. Daha sonra bu tablo ile bu sınıfı eşleyeceğiz. Read more »

Yapılandırma (Konfigürasyon)

Firebird + Hibernate kütüphanelerinin Eclipse’e nasıl ekleneceğini anlatalım:

Eclipse’e alışkın olmayanlar için adım adım neler yapılması gerektiğinden bahsedeceğim. İlk aşamada yapacaklarımız Hibernate ve Jaybird için gerekli JAR dosyalarını Kullanıcı Kütüphanesi (User Library) olarak Eclipse’e eklemek. Read more »

Hibernate

Hibernate, Java ile yazılmış ve özellikleri itibariyle de Java camiasında kabul görmüş ORM (Object Relation Mapping) katmanıdır. Hibernate, birçok veritabanıyla çalışabilir. Şu an için söyleyebileceklerim Hibernate’in yazılımcı için en büyük avantajı Domain Modelin (Tanım Modelinin) veritabanından soyutlanarak yazılmasına imkan tanımasıdır.

Adım adım Hibernate ile neler yapılabileceğini açıklamaya çalışacağım. Örnekleri denemek ve çalıştırmak için Eclipse kullanın. Konu başlıkları ise aşağıdaki gibi:

Henüz tamamlanmadı ve eklemeler devam edecek (02.03.2008: Eklemeler devam etmeyecek :) )