Bu yazı Ferhat Aykan tarafından yazılmıştır ve onun izni ile bu blogta yayınlanmıştır. Kendisine teşekkürlerimi sunarım.

Merhaba arkadaşlar. Bu yazı ile birlikte artık Hibernate kodlamaya ufaktan giriş yapıyoruz.

Hibernate Nedir?

Java class’larımızı(POJO) veritabanında ki tablolar ile eşleştirmeye yarayan ve kendine ait HQL sorgu ile daha kolay sorgu yapmamızı sağlayan bir framework’tur.

POJO Nedir?

Pojo -> Plain Of Java Object yani Java Class’larımızın en saf halidir. Aşağıdaki örnekte POJO’yu daha iyi anlayacağız.

Bu yazımızda Hibernate’in en temel konusu olan Entity Tanımlaması‘nı ve hangi şartların gerekli olduğunu öğreneceğiz.

En temel hali ile veri tabanımızdaki tablolarımıza karşılık gelen Java sınıflarımız bizim Entity sınıflarımız oluyor. Tablolarımızdaki sütunlar da bu Entity sınıfları içindeki değişkenler ile ifade ediliyor. Bir sınıfın Entity sınıfı olması için olmazsa olmaz 2 kural vardır arkadaşlar. Bunlar:

  • @Entity notasyonunun kullanılmış olması
  • @Id notasyonu kullanarak belirlenmiş bir ayırt edici alanın olmadır.

İlk önce Eclipse’mize Hibernate entegrasyonu yapıcağız ve veritabanı olarak da PostgreSQL kullanacağız ve bu yazımda anlaşılması kolay olsun diye her adımı resimleyerek gösterdim.

İlk önce PostgreSQL ‘ de Hibernate adlı bir veritabanı oluşturuyoruz.

İkinci adım olarak Eclipse IDE miz yapacağımız işi kolaylaştırmak için bize bazı araçlar sunmaktadır. Eclipse üzerinden tablomuza erişmek için Data Source Explorer perspektifini kullanacağız.

Eclipse üzerinden Window -> Show View -> Other -> Data Source Explorer ekliyoruz.

Daha sonra eklediğimiz Data Source Explorer‘a sağ tıklayarak new diyoruz.

PostgreSQL seçiyoruz ve bağlantımıza bir isim veriyoruz ve next diyoruz.

Eğer daha önceden bağlantı kurmadıysanız yeni bir bağlantı oluşturmak için tıklıyoruz.

Daha sonra varsayılan olarak verilen .jar siliyoruz.

https://jdbc.postgresql.org/download.html Adresinden gerekli olan Jar’ı indirebilirsiniz.

İndirdiğimiz jar Add Jar diyerek bilgisayarımızdan yüklüyoruz.

Daha sonra properties kısmına gelerek veritabanı bilgilerini giriyoruz ve ok tıklıyoruz.

Daha sonra test connection’a tıklayarak bağlantımızı kontrol ediyoruz.

Hibernate projemizi Maven tabanlı yapacağız. Hibernate projemizde kullanabilmek için gerekli olan Jar’ları(Kütüphaneleri) otamatik bir şekilde maven sayesinde projemize dahil edeceğiz. İlk önce bir maven projesi açalım.

Projemize bir ad veriyoruz.

Daha sonra gerikli Jar’ları indirmek için pom.xml gerekli dependecies leri tanımlıyoruz.

Ve resimde de görüldüğü gibi gerekli Jar dosyalarını Maven sayesinde otomatik bir şekilde indirmiş olduk.

pom.xml dependecies’lerimiz.

       <dependencies>
  		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>5.1.0.Final</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<version>9.1-901.jdbc4</version>
		</dependency>
	</dependencies>

Ve sıra geldi bir tane Entity tanımlamaya. En başta belirttiğimiz gibi Entity tanımlayabilmek için 2 tane kuralımız vardı;

  • @Entity notasyonunun kullanılmış olması
  • @Id notasyonu kullanarak belirlenmiş bir ayırt edici alanın olmadır.

Burada Student adında bir Java class’ı oluşturuyoruz.

Bu class’a POJO diyoruz. Sadece Student ve ona ait özellikler mevcut. POJO’larımız da herhangi bir hesaplama doğrulama methodları tanımlamak önerilmez. POJO larımızın saf ve temiz olması kodumuzun bakımınıda kolaylaştırır.

Bir Entity tanımlayabilmek için Java class’ımızın başında @Entity notasyonunu kullanıyoruz.

Ve her Entity içinde bir tane @Id tanımlıyoruz.

Her bir entity bir veritabanındaki tabloya karşılık gelmektedir.

Bu resimden şunu anlayabiliriz. Veritabanın Student adında bir tablo oluşacak ve tablonun stunlarıda burada tanımladığımız instance veriable’lar olucak.

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Student {

	@Id
	private int studentId;
	private String name;
	
	private String surname;

	public Student(int studentId, String name, String surname) {
		super();
		this.studentId = studentId;
		this.name = name;
		this.surname = surname;
	}
	public int getStudentId() {
		return studentId;
	}
	public void setStudentId(int studentId) {
		this.studentId = studentId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getSurname() {
		return surname;
	}
	public void setSurname(String surname) {
		this.surname = surname;
	}

}

Şimdide Hibernate için gerekli olan configration dosyamızı ayarlayacağız.

Veritabanımızın PostgreSQL olduğunu belitmek için onun url sini yazdık : org.postgresql.Driver

Daha sonra veritabanımıza ait url, username, password ve PostgreSQL’ e ait dialect sınıfını yazıyoruz.

<property name=”hibernate.hbm2ddl.auto”>create</property> anlamı ise her uygulamamızı çalıştırdığımızda veritabanınından tablomuzu silip baştan oluşturmaktır.

update gibi diğer fonksiyonlarını diğer derslerimizde bahsedeceğim.

Diğer bir property’miz ise : <property name=”hibernate.show_sql”>true</property> uygulamamızı her çalıştırdığımızda consolda veri tabanımıza tabloyu oluşturma ve ekleme işlemleri için oluşan sql sorguları gösterip göstermeyeceğini ayarlıyoruz. True ve false olarak iki fonksiyondan oluşmaktadır.

Bir diğer özelliğimiz <mapping class=”Student”/> ise @Entity notasyonunu kullanarak oluşturduğumuz java classlarını burada bildiriyoruz. Her oluşturduğumuz Entity burada bildirmek zorundayız.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
   		<session-factory name="">
  		<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
  		<property name="hibernate.connection.url">jdbc:postgresql://127.0.0.1:5432/Hibernate</property>
  		<property name="hibernate.connection.username">postgres</property>
  		<property name="hibernate.connection.password">123456</property>
  		<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
  		<property name="hibernate.hbm2ddl.auto">create</property>
  		<property name="hibernate.show_sql">true</property>
  		<mapping class="Student" />
   		</session-factory>
</hibernate-configuration>

Daha sonra uygulamamızı test etmek için gerekli olan Main sınıfını oluşturuyoruz.

İlk önce SessionFactory arabirimini oluşturuyoruz. SessionFactory arabirimini oluştururken Configuration nesnesinden yararlanıyoruz ve Hibenate configuration(hibernate.cfg.xml) dosyasını burada SessionFactory nesnesine veriyoruz. SessionFactory nesnesi Session oluşturmamızı sağlar. Session ile de veritabanımız dan ekleme silme güncelleme gibi işlemler yapmaktayız.

Session nesnesini SessionFactory arabirimindeki openSession() methodu ile Session nesnesini oluşturuyoruz.

Session ile veritabanımıza haritalanacak olan nesneleri save ediyoruz ve işlemlerimizin kalıcı olması içinde commit ediyoruz.

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Main {

	public static void main(String[] args) {
		
		Student student1 = new Student(1, "Ferhat", "Aykan");
		Student student2 = new Student(2, "Enes", "Çınar");
		
		
		SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
		
		Session session = sessionFactory.openSession();
		
		session.save(student1);
		session.save(student2);
		session.save(new Student(3, "Ahmet", "Aykan"));
		session.save(new Student(4, "Ugur", "Baş"));
		
		session.beginTransaction().commit();
		
	}
}

Uygulamamızı çalıştırdığımızda consolda Sql sorgularının oluştuğunu görmekteyiz.

<property name=”hibernate.show_sql”>true</property>

Eger property’mizi false yapsaydık console’da sql sorgularımızı göremeyecektik.

Ve daha sonra Data Source Explorer’i refresh ettiğimizde tablomuzun oluştuğunu görmekteyiz.

Aynı şekilde veritabanımıza baktığımızda kayıtlarımızın oraya da eklendiğini görmekteyiz.

Bu yazı ile kurulumları bitirmiş olup burada sonlandırıyorum. Bir sonraki yazıda hızlı bir şekilde kod örnekleriyle ilerleyeceğiz, görüşmek üzere 🙂