Named Query dipnotu kullanımını inceliyor olacağız.Named Query dipnotu projelerimizde sorgular yürütebilmemize olanak verir.Projelerimizde bir orm aracı kullanmak yerine jdbc ile kendimiz sorgular yazarak işleri yaptığımızda sorugulara ve yürütülen işlere hakim oluruz,tüm işlerimizi nesneler yerine sorgular aracılığı ile hard code diye tabir edilen cinsten yaparız.Bunun avantajlı olduğu gibi bir o kadar da dezavantajları vardır.Orm kullandığımızda ise artık sorgular yerine işlerimizi nesnelere bağlayarak yapmaya başlarız ve bir çok sorguyu kullandığımız orm aracının yada jpa nın yazılmış sınıfları,metotları ile gerçekleştiririz ve arka tarafta yürütülen sorgular bizim sorunumuz olmaktan çıkmış orm aracı tarafından bizden bihaber şekilde gerçekleştirilmektedir.Fakat işler böyle yürümediği durumlarda bazı işler için kendi özelleştirilmiş sql benzeri jpa veya orm aracının sorgu dilini kullanırız.Bu sorguları kullanmak için ise Named Query adında bir dipnot vardır.
İlk olarak örnek bir JPA projesi açtım,mysql üzerinde basit bir siparişler tablosu oluşturdum ve gerekli ayarlamaları yaptıktan sonra tablomu haritaladım ve sınıfımı oluşturdum.
package model; import java.io.Serializable; import javax.persistence.*; import static javax.persistence.GenerationType.AUTO; @Entity @Table(name="sparis") @NamedQuery(name="Siparis.findAll", query="SELECT s FROM Siparis s") public class Siparis implements Serializable { private static final long serialVersionUID = 1L; @Id private int idSparis; private String adetSparis; private String urunadiSparis; private String urunkoduSparis; public Siparis() { } public int getIdSparis() { return this.idSparis; } public void setIdSparis(int idSparis) { this.idSparis = idSparis; } public String getAdetSparis() { return this.adetSparis; } public void setAdetSparis(String adetSparis) { this.adetSparis = adetSparis; } public String getUrunadiSparis() { return this.urunadiSparis; } public void setUrunadiSparis(String urunadiSparis) { this.urunadiSparis = urunadiSparis; } public String getUrunkoduSparis() { return this.urunkoduSparis; } public void setUrunkoduSparis(String urunkoduSparis) { this.urunkoduSparis = urunkoduSparis; } }
Burada gördüğünüz gibi
@NamedQuery(name="Siparis.findAll", query="SELECT s FROM Siparis s")
bir dipnot yer alıyor.Bu direk olarak haritalama yaptığınızda sizin için oluşturulan bir sorgudur.Sql söz dizimine alışıksanız pekte farklı olmayan bir biçimde basit bir select sorgusu yapıldığını fark etmişsinizdir.Bizde buradaki sorguyu name etiketi ile belirtilen adı ile başka bir yerde çağırarak bu sorgu sonucunda gelen verilerin işlemesini sağlayacağız.Bir sınıf daha oluşturdum ve basit olarak tabloya bir veri ekleyip ardından ise bu sorgu ile nasıl çektiğimizi göreceğiz.
package controller; import javax.persistence.*; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import model.Siparis; public class Connectivity { public static void main(String[] args) { EntityManagerFactory emf; EntityManager em; //Siparis sınıfından bir instance alıyoruz Siparis siparis=new Siparis(); siparis.setIdSparis(1); siparis.setUrunkoduSparis("1ABCDF"); siparis.setUrunadiSparis("LG MONİTÖR"); siparis.setAdetSparis("387"); //Persistence dosyaımızın ismi 004_JPA ve bu dosyanın ismini veriyoruz emf=Persistence.createEntityManagerFactory("004_JPA"); em=emf.createEntityManager(); //Bir Transaction başlatıyoruz EntityTransaction et=em.getTransaction(); et.begin(); //ve verimizi ekliyoruz em.persist(siparis); et.commit(); System.out.println("VERİ KAYDEDİLDİ"); /*Şİmdi biraz önce değindiğimiz ismi Siparis.findAll olan sorgumuzu çağırdık * bu sorgu sonucunda bize bir liste döndürdü * bir döngü ile bu liste içerisinde döndük ve liste elemanlarını * nesnemiz ile eşledik ve daha sonra bu nesneleri ize yazdırdık. * * */ Query query=em.createNamedQuery("Siparis.findAll"); java.util.List<?> list=query.getResultList(); for (Object obj : list) { siparis=(Siparis) obj; System.out.println(siparis.getIdSparis()+"\n"+siparis.getUrunadiSparis()); } em.close(); emf.close(); } }
Çalıştırdığımızda ise sorgu sonucu olarak eklenen veriler konsol çıktısı olarak görüyüruz.