Bu yazıda en basit tanımıyla ORM, Spring Data ve JPA kavramlarından bahsettim. Olabildiğince basit, kafa karıştırmayacak şekilde bir içerik olmasına özen gösterdim. Daha fazla bilgi edinmek isteyenler için konu altında gerekli kaynakları ekledim. Konu ile ilgili yorumlarınızı yorum formu üzerinden iletebilirsiniz. Faydalı olması dileğiyle.

ORM - Object Relational Mapping

  • ORM toolları nesne tabanlı programlamada bulunan objeler ile veritabanı sistemimizdeki tablolar arasında köprü görevi kurulmasını sağlar. 
  • ORM bir konsepttir. Yani model ile veritabanı arasında kurulması gereken konseptin adıdır. Bir araç değildir. 
  • Hibernate gibi EclipseLink, OpenJPA, TopLink gibi birçok farklı ORM aracı bulunmaktadır 
  • ORM toollarından önce yazılımcılar, modeldeki tanımlamaları veritabanındaki tablolarla eşleştirecek kodlar yazıyorlardı.

Hibarnate

  • ORM’nin bir aracıdır. ORM konseptini uygulayan bir araçtır.
  • JPA'nın implementasyonudur.

JPA - Java Persistence Api

  • Java’nın persistence (kalıcılaştırma) apisi olarak geçer. Persistence kelimesi ise uygulama tarafında, veritabanındaki tablo yapısına denk gelen bir model oluşturmak ve bu modele gerekli dataları set etmek anlamına gelmektedir. Bu objeye ait datalar JPA tarafından veritabanına kayıt edilmek üzere kullanılmaktadırlar. 
  • JPA aslında Hibernate, EclipseLink, DataNucleus gibi diğer persistence apilerin birleştirilmesiyle oluşmuştur. 
  • JPA bir standarttır. Hibernate, EclipseLink gibi ORM toolları, JPA'nın implementasyonlarıdırlar.
  • JPA sayesinde ORM toolları arasından istediğimiz birini kullanabilmekteyiz.

Konuyla ilgili internetteki kaynaklarda verilmiş şu benzetmeler gayet hoşuma gitti.
JPA is the dance, Hibernate is the dancer.
JPA is the art, Hibernate is the artist."

Spring Data JPA

  • Hibernate gibi JPA Provider’ların üzerine ek bir soyutlama katmanı ekleyerek veritabanın sorguları kolaylaştırılmıştır. 
  • Sprin Data JPA kullanırsak Repository sınıfımız şöyle olacaktır. En üstte Spring Data JPA > Spring Data Commons > JPA Provider 
  • Spring Data Commons, veri kaydetmeye özgü Spring Data projeleriyle paylaşılan altyapıyı sağlar. 
  • JPA Provider, Hiberbate gibi Java Persistence API’leri implement eder. 

JpaRepository, CrudRepository ve PagingeAndSortingRepository


Yazıyla paralel olarak yararlanabileceğiniz kaynaklar :
Yazının devamını oku
Daha önceki yazımda en temel ve en yaygın olarak kullanılan Spring anotasyonlarından ve onların çalışma mantığından bahsetmiştim. Kısa ve öz bir şekilde anlattığım temel anotasyonlar ve çalışma mantıkları konulu yazıya şuradan ulaşabilirsiniz :

Spring için @SpringBootApplication, @Bean, @Configuration, @Component, @EnableAutoConfiguration, @ComponentScan anotasyonları
Yazının devamını oku
Bu yazıda en basit şekilde anotasyonların çalışma mantığı yer almaktadır. Ayrıca kısa ve öz bir şekilde, en çok kullanılan anotasyonlara, çalışma mantıklarına ve benzer anotasyonarla aralarındaki farklara değindim. Daha fazla bilgi edinilebilmesi adına yazı sonuna kaynakça listesi ekledim. Konuyla ilgili yorum ve görüşlerinizi yanın en altındaki yorum formu üzerinden iletebilirsiniz.

Yazının devamını oku
Eclipse ile herhangi bir Java uygulaması derlerken bir anlık dikkatsizlikle karşılaşılması muhtemel hatalardan biridir. Özellikle Java'ya yeni başlayanların anlam veremedikleri bir hata olarak karşılarına çıkar.
"The selection cannot be launched and there are no recent launches." hatası genelde public static void main(String[] args) fonksiyonu yazılmadığında yada bu fonksiyonu yazdınız ama fonksiyonun içine String[] args parametresinin yazılmaması gibi dikkatsizkiler sonucunda karşılaşılan bir hatadır.

Java uygulamaları çalışmaya başlarken ilk önce public static void main(String[] args) fonksiyonu üzerinden çalıştıkları için tüm kodunuz hatasız olsa bu fonksiyonun yazımında yapacağınız bir yanlışlık, derleme sırasında size hata olarak geri dönecektir. Dolayısıyla Java kodunuz çalışmayacaktır. Bu yüzden, "The selection cannot be launched and there are no recent launches." hatasını giderebilmek için öncelikle public static void main(String[] args) fonksiyonunu doğru yazdığınızdan emin olun.
Yazının devamını oku
İlkokul yıllarından beridir öğretilen Güneş sistemini şimdi ise kodlara dökeceğiz ve bunun sonucunda kendi tasalardığımız güneş sistemimizi elde etmiş olacağız. Aşağıdaki gif resimden de görüleceği üzere aslında güneş sisteminde birçok gezegen vardır ama biz OpenGL ile sadece Güneş, Dünya ve Ay'ın birbirlerine göre olan hareketlerini kodlayacağız.

Üstteki gif resme göre bizim ilgilenmemiz gereken kısım ortadaki Güneş, 3. dairede dönen Dünya ve dünyanın etrafında dönmekte olan Ay olacak.

Güneş sistemine göre,
* Güneş sabittir ve kendi etrafında soldan sağa döner.
* Dünya hem kendi etrafında hem de Güneş etrafında soldan sağa döner.
* Ay hem kendi etrafında hem de Dünya'nın etrafında soldan sağa döner.

Öncelikle GL Translatef ile bir sahne yaratmamız gerekecek. Bu sahnede ise Güneş olacak. Sahnemizi GL Translatef ile belirleyeceğiz.

gl.glTranslatef(0f, 0f, -300f);  //sahne

Burada 1. parametre X, 2. parametre Y ve 3. parametre Z eksenidir.  X ve Y eksenlerini sabit bıraktım. Z eksenini ise -300f olarak belirledim. -300f yapmam ile birlikte Güneş'in bize Z ekseninde 300f uzakta olmasını sağladık. Kodları kendiniz yazdığınız sırada bu değerle oynarsanız ne demek istediğimi daha iyi anlayabilirsiniz.

Sahnemizi belirledikten sonra bu sahnemize Güneş'i çizip, kendi ekseni etrafında dönmesini sağlayacağız.Güneş'i kendi ekseni etrafında döndürebilmek için, Güneş'i çizmeden önce dönme fonksiyonunu yazmamız gerekiyor. 

gl.glRotatef(aci, 0f, 1f, 0f); //Y ekseninde dönüş.
gl.glColor3f(1f, 0.2f, 0.0f); //Güneşin rengi

3 sayısal parametre arasından ortadakinin değerini 1 yapmam ile beraber artık Güneş'i kendi ekseni etrafında soldan sağa döndürmüş olduk. Baştaki açı ise display fonksiyonu dışında float olarak tanımlanan bir ifadedir. Anlatımın sonunda indirme kodları var. Onları incelediğiniz zaman demek istediğimi anlayacaksınız zaten.

Dönüşünü ve rengini belirledikten sonra sıra geldi Güneş'in kendisini oluşturmaya. GLUquadric kullanacağız.

GLUquadric gunes = glu.gluNewQuadric();
glu.gluSphere(gunes,30f,15,15);
glu.gluDeleteQuadric(gunes);

30f ifadesine kabaca boyut diyebiliriz ama aslında tam olarak öyle değil. 30f ifadesi, Güneş'in Z ekseni üzerinde bize olan uzaklığını ifade ediyor. Bu değeri büyüttükçe Güneş'in +Z eksenindeki konumunu arttırmış oluyoruz. Bu da bize, sanki Güneş'in boyutunu büyütmüşüz gibi gelebilir. 15 olan ifadeler ise Quadric şeklinin küre haline gelmesi sağlıyor. (bkn:quadric)

Güneşin oluşturulması ile ilgili tüm kodlar işte bunlardı. Şimdi ise Güneş'in üzerine siyah bir kare koyalım ki maksat döndüğü belli olsun.

    //güneşin üzerindeki siyah kare :
    gl.glColor3f(0.0f, 0.0f, 0.0f);
    gl.glBegin(GL_QUADS);
    gl.glVertex3f(1f,1f,30.001f);
    gl.glVertex3f(-1f,1f,30.001f);
    gl.glVertex3f(-1f,-1f,30.001f);
    gl.glVertex3f(1f,-1f,30.001f);
    gl.glEnd(); //Güneş'e ait kodların bittiğini belirttik.


Siyah karemizi de bu şekilde oluşturduk. Karenin 4 köşesinin de koordinatlarına dikkat ederseniz eğer, Z koordinatını hepsinde 30.001f olarak yazdım. Çünkü Güneş +Z ekseninde 30f koordinatındaydı. Biz de eğer karenin +Z eksenini 30.001f olarak ayarlarsak, kareyi güneşe yapışık gibi görebiliriz. Bu değer artarsa güneşten ayrılır. Bu değer azalırsa, kare Güneş'in içine girer ve gözükmez.

Güneş'i de yaptıktan sonra şimdi gelelim Dünya'yı yapmaya. Dünya için de benzer işlemleri uygulayacağız. Dünya için önce bir sahne yaratıp daha sonra yine aynı şekilde Dünya'yı bu sahnede oluşturup, döndereceğiz. Ama Dünya, Güneş gibi sadece kendi ekseni etrafında dönmüyor. Aynı zamanda Güneş etrafında da dönüyor. İşte bu yüzden Dünya'nın sahnesini Güneş etrafında döndürmeliyiz. Dünya'yı da kendi ekseninde döndürmeliyiz ki, Dünya hem kendi etrafında hem de Güneş etrafında dönüyormuş gibi gözüksün.

O zaman dünyanın sahnesini yazmadan önce, eksenin Güneş etrafında dönmesini sağlayacak Rotatef kodunu yazalım. Daha sonra sahneyi oluşturalım :

gl.glRotatef(aci, 0f, 1f, 0f); //Y ekseninde döndürme kodunu yazdık.
gl.glTranslatef(0f, 0f, -80f); //Dünya'nın sahnesini oluşturduk.

Sahneye ait kodları yazdık. Şimdi Dünya'ya ait kodları yazalım. Yani kendi etrafında döndürelim, renk verelim ve son olarak Dünya'nın kendisini yapalım.

gl.glColor3f(0f, 0f, 1f); //Dünya'nın rengi
gl.glRotatef(aci1, 0f, 1f, 0f); //Dünya'nın kendi etrafında dönüşü.

Renk ve kendi ekseni etrafında dönüş şeklini belirledik. Sıra geldi Dünya'nın kendisini oluşturmaya :

GLUquadric dunya = glu.gluNewQuadric();
glu.gluSphere(dunya,12f,15,15);
glu.gluDeleteQuadric(dunya);

Dünya işlemleri de bu kadardı. Güneş için yaptığımız siyah karenin kodlarının aynısı yazacağız şimdi. Tek fark ise, karenin 4 köşesinin de +Z eksenleri bu sefer 12.001f olacak. Çünkü, üstteki koddan da göreceğiniz üzere, Dünya'nın +Z ekseni üzerindeki koordinatını +12f olarak belirlemiştik Dünya'yı oluştururken.

    //dünyanın üzerindeki siyah kare :
    gl.glColor3f(0.0f, 0.0f, 0.0f);
    gl.glBegin(GL_QUADS);
    gl.glVertex3f(1f,1f,12.001f);
    gl.glVertex3f(-1f,1f,12.001f);
    gl.glVertex3f(-1f,-1f,12.001f);
    gl.glVertex3f(1f,-1f,12.001f);
    gl.glEnd(); //Dünya'ya ait kodların bittiğini belirttik.


Son olarak ise Ay'ı oluşturmak kaldı. Ay da Güneş ve Dünya'ya benzer şekilde oluşturulduğu için Ay için uzun uzun anlatım yapmadan direkt olarak kodları yazacağım.

//Ay'a ait kodlar :
gl.glRotatef(aci,0f, 1f, 0f); //Ay'ın sahnesini Dünya ekseni etrafında döndürmek için.
gl.glTranslatef(0f, 0f, -20f); //Ay'ın sahnesi
gl.glColor3f(1f, 1f, 1f); //Ay'ın rengi
gl.glRotatef(aci1,0f,1f,0f); //Ay'ın kendi ekseni (Y ekseni) etrafında dönmesi için
       
//Ay'ı oluşturan kodlar :
GLUquadric ay = glu.gluNewQuadric();
glu.gluSphere(ay,3f,15,15);
glu.gluDeleteQuadric(ay);

//Ay'ın üzerindeki siyah kare : 
gl.glColor3f(0.0f, 0.0f, 0.0f);
gl.glBegin(GL_QUADS);      
gl.glVertex3f(1f,1f,3.001f);      
gl.glVertex3f(-1f,1f,3.001f);  
gl.glVertex3f(-1f,-1f,3.001f);
gl.glVertex3f(1f,-1f,3.001f);
gl.glEnd(); //Ay'a ait kodların bittiğini belirttik.


Buraya tıklayarak Java programlama diline ait olan OpenGL taslağını indirebilirsiniz. Taslağı indirdikten sonra kodların arasında benim belirttiğim alana, burada anlattığım kodları sırasıyla eklemeniz gerekmektedir.

 Bakınız :


Taslaktaki kodların açıklamaları karşılarında yazıyor ama siz o kodları standart olarak alabilirsiniz. Ay ve Dünya'nın Güneş sistemindeki hareketlerine ait kodlar bu konuda anlattığım kısımlardır. Konu ile ilgili düşünceleriniz, konu altına yorum olarak bırakabilirsiniz. İyi çalışmalar.
Yazının devamını oku
BLOGKAFEM.NET © Copyright 2008-2026
Sitedeki yazıların her hakkı BLOGKAFEM.NET sitesine aittir.
Kopyalanması halinde lütfen kaynak gösteriniz.
DMCA.com Protection Status
Anasayfa | Hakkında | İletişim