Persistence ne demektir ? Persistence, kelime anlamıyla süreklilik, kalıcılık gibi anlamlara gelir.
Yazılımda ise kullanılan objelerin kalıcı hale getirilmesine “persistence” denir. Peki bu persistence nasıl sağlanıyor ?
Şöyle ki, yazılımınızda bağımsız bir depolama ünitesi seçiyorsunuz, buna persistence storage deniyor. Bu bir dosya da olabilir , bir veritabanı da olabilir.
Uygulamanız içerisinde oluşturduğunuz objelerinizi persistence storage’e kaydediyorsunuz. Bu şekilde program sonlandığında bile bu objeler persist olmuş oluyor daha sonra istediğiniz zaman persistence storage’den çekerek kullanıyorsunuz. Buna da load etmek diyoruz.
Java ile ilişkisel veritabanlarına erişmek için JDBC(Java Database Connectivity) API kullanılır. JDBC, Uygulama-Veritabanı arasında köprüdür ayrıca JDBC Driver manager sayesinde farklı veritabanlarına bağlanabilirsiniz. SQL komutları ile işlemlerimizi yaparız.
Örneğin;
JDBC ile veritabanına kayıt eklerken kullandığımız yapı;
stmt.executeUpdate( “INSERT INTO il VALUES (1, ‘Adana’)”);
Projede Oracle ile çalışıyorken SQL’lerimizi yazdık ve seneler sonra projenin MySQL ile çalışması kararı alındığında syntaxları birebir aynı olmadıkları için tüm yazılan SQL cümlelerinin tekrar kontrol edilmesi ve revize edilmesi gerekir. Ayrıca Transaction mekanizmasını kendimiz her seferinde el ile tetikliyoruz ve metotlarımıza try-catchler ve bu catchler içerisinde rollback’ler çağırılıp duruyor.
Yani bütün kontrol yazılımcının elinde …
İştee tam ORM aracı kullanma zamanı … Bir arabanız var diyelim , bu arabanın nasıl çalıştığını kimse detaylıca bilmez. Siz sadece sürmesini bilirsiniz kontağı çalıştırır ve gidersiniz. İşte ORM araçlarıda “siz database ile uğraşmayın o kısmı bana bırakın” diyerek soyutlaştırır. Plug in Play mantığıyla çalıştığını düşünün sizin hangi veritabanını kullanıdığınız önemli değil siz nesneleri kullanın o sql cümlelerini oluşturur hemde bağlı olduğunuz db’ye göre.
ORM, Object Relational Mapping anlamına gelmektedir. O/R Mapping olarakta yazılabilir. ORM, İlişkisel veritabanı ile nesneye yönelik programların arasında bir tür köprü özelliği gören ve ilişkisel veritabanındaki bilgilerimizi yönetmek için, nesne modellerimizi kullandığımız bir tekniktir. ORM tekniği belli bir programlama diline bağlı değildir ve her nesneye yönelik dillerde yazılabilir/kullanılabilir.
Avantajları:
- Nesneye yönelik bir programlama metodu sunuyor.
- Yazılan kodun veritabanı çeşidiyle bağımlılığı yoktur. (Oracle, SQL Server, MySQL vs)
- SQL/JDBC bilmenize/yazmanıza gerek kalmadan çok kısa bir zamanda ve de çok daha az kod ile veritabanına bağlı bir uygulama yapabilirsiniz.
- ORM araçlarının çoğu açık kaynak kodludur.
- Polymorphism, caching, transaction, vs çok sık görülen sorunlara çözüm sunuyor.
- Çok daha iyi test edilebilir kod yazmamızı sağlar.
Dezavantajları:
- Performans sorunları
- Bilgi alış-verişi sırasında kontrolün yüzde yüz sizin elinizde olmaması (Üretilen SQL bazen çok farklı olabilir)
- Kullanılan ORM aracını öğrenmek için harcanan zaman
ORM Araçları
– Hibernate
– JPA
– Apache OpenJPA
– Oracle Toplink
– EclipseLink
– Apache Cayenne
– MyBatis
Hibernate Nedir?
Hibernate, JPA implemantasyonu ve bir ORM aracıdır. 2001 yılında Gavin King tarafından oluşturulan açık kaynak kodlu hem Java’da hem de C#’ta kullanılabilen bir frameworktür. Hibernate ile yapılan tüm işlemleri JDBC ile de yapabilmekteyiz. Yani Hibernate olmasaydı olurdu fakat kod karışıklığı ve Nesneye Yönelimli Programlama mantığına uygun bir yazılım standartına ulaşmak zor olurdu.
Hibernate ile kayıt eklerken kullandığımız yapı;
session.save(il);