JPA

JPA 07 – Kayıt Getirme Ve Ekleme

Merhaba arkadaşlar. Bu dersimizin konusu JPA’da veritabanından kayıt getirilmesi ve veritabanına kayıt eklemesi olacak.

Önceki dersimizde JPA’nın veritabanı ile iletişim kurulurken temel öğesi olan EntityManager nesnesinin elde edilmesini öğrenmiştik. Şimdi bu yazıda EntityManager nesnesi ile veritabanına kayıt ekleyeceğiz ve veritabanından kayıt getireceğiz.

JPA’ya giriş yazısında yazılarımı Java SE geliştirme ortamında yazacağımı belirtmiştim. Önceki yazıda anlattığım @PersistenceContext notasyonunu kullanmak için bir Java EE sunucusuna ihtiyacımız var ve o iş biraz daha Java EE tarafına giriyor. Gelecek yazıda bir web projesi ile onu da kullanacağız. Bu dersimizde Java SE ortamında EntityManagerFactory ile işimizi halledeceğiz.

Şimdi bir örnek yapıp kayıt ekleme ve getirme işlemine bakalım.

Kayıt Ekleme İşlemi

Öncelikle veritabanımız içinde id, name ve surname sütunlarına sahip person adında bir tablo oluşturalım ve projemize  haritalayalım. Bu işlemin nasıl yapılacağını bu yazı için bildiğiniz varsıyıyorum. Bilmiyorsanız buradan IDE’nize uygun yazıyı okuyarak tablonuzu projenize nasıl haritalayacağınızı öğrenebilirsiniz.

Şimdi tablomuzdan elde ettiğimiz Entity sınıfımız vasıtası ile veri tabanına kayıt ekleyeceğiz. NetBeans’ın benim için ürettiği entity class’ı şöyle:

Person.java

PersistOperation.java

JPA çatısı altında veri tabanına ekleme işlemi yapmak istediğimizde bunun karşılığı Persist işlemidir. Bu işlemi yapabilmek evvela bir EntityManager nesnesini edinmiş olmamaız gerekmektedir. Sınıfımız içinde de bu elde etme işlemini önceki yazıda anlattığım EntityManagerFactory ile yapıyoruz.  Akabinde az önce veritabanından haritaladığımız Entity sınıfından bir nesne oluşturuyoruz. Bu nesnenin set metotları vasıtası ile veritabanına kaydetmek istediğimiz bilgileri ilgili yerlere set ediyoruz. Örneğin burada oluşturulan Person nesnesinde isim özelliğine Akın ve soyisim özelliğine de Kaldıroğlu atanıyor.

Tyr-cath bloğunun tyr kısmı içinde ilk olarak elde ettiğimiz EntityManager objesinden bir Transaction başlatıyoruz. Kayıt ekleme işlemi için Transaction başlatılması zorunludur arkadaşlar.  JPA veritabanındaki bilgi üzerinde değişiklik yapılması için bir Transaction’ın başlatılmış olmasını zorunlu kılar.

EntityManager nesnesinin persist metodu ile veritabanına kayıt eklemesi işlemini sıraya alıyoruz. Bu metoda görüldüğü üzere Person Entity sınıfından oluştuduğumuz nesneyi veriyoruz. JPA bu bu nesne üzerinden Entity sınıfına gidecek ve sınıfı üzerinden de veritabanındaki aynı isimdeki tabloya ulaşacak ve nesne içindeki alanları ilgili kolonlara ekleyecek.

Try kısmındaki 3.satırdaki kodda ise bir commit yani sıraya alınmış işlemlerin veritabanına yansıtılmasını gerçekleştiriyoruz.  Commit işlemi Transaction sona erdirilir arkadaşlar.

Try kısmındaki 4 ve 5.satırdaki kodda EntityManager ve EntityManagerFactory nesnelerinin kapatılması işlemi gerçekleştiriliyor. 6. satırda durum ile ilgili bilgi veriliyor.

Eğer try kısmı içinde bir hata meydana gelir ise, commit işlemi başarısızlığa uğrarsa yapılan tüm işlemler geri alınır ve doğrudan catch bloğuna gidilip hata fırlatılır. JPA bir başka güzel yanı olan bu yapı ile hatalı veri işlenmesinin de önüne geçilir.

Şimdi kodumuzu çalıştırıp ekran çıktısına ve veritabanına bakalım:

Konsolda kaydın başarı ile eklendiği belirtiliyor.

Konsolda kaydın başarı ile eklendiği belirtiliyor.

Veritabanımıza da kayıt başarı ile eklendi.

Veritabanımıza da kayıt başarı ile eklendi.

Kayıt Getirme İşlemi

JPA ile veritabanımızda bulunan kayıtları getirmenin iki yolu var arkadaşlar. Birincisi Query yöntemi ile SQL’e oldukça benzeyen kod yazmak, ikincisi ise Find metodunu kullanmaktır arkadaşlar. Birinci yöntemde tablodaki tüm kayıtları bir parametreye ihtiyaç duymaksızın elde edebilirken ikinci yöntemde kaydın Primary Key alanının bilgisine ihtiyacımız vardır. Ne demek istediğimize şimdi kod ile bakalım.

Yukarıdaki kayıt ekleme kodunu kullanarak ben veri tabanına yeni kayıtlar ekliyorum ve bu kayıtları getireceğiz az sonra. Yeni hali şöyle tablomuzun:

Screen Shot 2015-09-10 at 02.00.40

Şimdi birinci yöntem ile kayıt getirme işleminin nasıl yapıldığına bakalım.

GetInfoWithQueryOperation.java

Kodumuz içinde yine bir EntityManager nesnesi elde ettikten sonra bir TypedQuery nesnesi tanımlıyoruz. Bu nesne java.util altındaki List’ benzemektedir. TypedQuery’nin tipini de < > işaretlerinin arasında belirtiyoruz. Bizim Entity sınıfımızın adı Person olduğu için TypedQuery nesnesinin tipi de Person’dır.  Tanımladığımız bu TypedQuery nesnesine EntityManager nesnesinin createQuery metodundan dönen sonucu aktarıyoruz. Burada herhangi bir TransAction başlatılması zorunlu değildir. createQuery metodu içine iki parametre alır. Birinci parametre JPQL ifadesidir, ikinci  parametre de hangi Entity sınıfının kullanılacağıdır. Java Persistence Query Language ve Entity sınıfını parametre olarak verdikten sonra getirilen verilerin tutulacağı bir liste tanımlıyoruz. Bu liste de TypedQuery nesnesi gibi Person tipinde. Tanımladığımız bu nesneye TypedQuery nesnesinin getResultList metodunu kullanarak dönen listeyi aktarıyoruz. For döngüsü içinde de dönen listenin konsola yazılması işlemi yapılıyor.

Şimdi kodun çıktısına bakalım:

Kayıtlar tablodan başarı ile getirildiler.

Kayıtlar tablodan başarı ile getirildiler.

Birinci yöntemle en basit şekilde böyle kayıtları alıyoruz arkadaşlar. Şimdi ikinci yöntem olan find metodunu inceleyelim. Find metodunu kullanabilmek için az önce belirttiğim üzere Primary Key alanı hakkında bilgi sahibi olmamız gerekmete. Bir nevi SELECT komutundaki WHERE id=idBilgisi olarak düşünebiliriz. Nasıl kullanıldığına bakalım.

FindMethodOperation.java

Find metodunda yapmamız gereken tek şey find metoduna parametre olarak hangi Entity sınıfının kullanılacağının ve hangi kaydın çekileceğinin parametre olarak verilmesidir. Person tablosuz üzerinde çalıştığımız için Entity sınıfımız Pserson sınıfıdır. Getirmek istediğimiz kayıt da bu örnek bize bağlıdır. Ben örneğin id’si 2 olan kaydı getir diyorum. Yine burda da bilgiyi alırken bir Transaction başlatmak zorunlu değil ama bu yöntemi biraz geliştirip UPDATE işlemi yapılabiliyor. O zaman veri üzerinde operasyon olacağı için Transaction zorunlu hale geliyor.

Screen Shot 2015-09-10 at 11.56.06

id bilgisi 2 olan kayıt getirildi.

 

Bu yazıda da bu kadar arkadaşlar. JPA çatısı altında veritabanına kayıt göndermeyi ve kayıt almayı öğrenmiş olduk. Gelecek yazıda da kayıt güncelleme ve kayıt silme işlemlerini öğreneceğiz. Sağlıcakla kalın.