Kullandığım teknolojiler ve araçlar;
- JDK 1.7
- Eclipse Juno 4.2
- Oracle XE 11g
- Hibernate 4.2
Yazdığım proje basit bir konsol uygulamasıdır. Hibernate’in son sürümü olan 4.2 ile geliştirilmiştir. Dolayısıyla SessionFactory nesnesi yaratılırken deprecate edilen eski metot yerine yenisi kullanılmıştır.
Öncelikle Eclipse’de yeni bir Java projesi yaratalım. Ben ismine HibernateCRUD dedim. Projemin “Build Path” ine Hibernate’in JAR dosyalarını ekliyorum. Bu işlemi proje üzerinde sağ tıklayarak BuildPath -> Add External Archives.. seçeneği ile gerçekleştirebilirsiniz.
Kullandığım JAR listesi aşağıdaki gibidir.
- Öncelikle buradan indirmiş olduğunuz hibernate-search-4.2.0.Final ZIP dosyasını dilediğiniz bir yere çıkartın. Daha sonra distlibrequired altındaki tüm JAR’ları ekleyin.
- İkinci adımda eğer benim gibi annotation kullanacaksanız gereken hibernate-annotations.jar, hibernate-commons-annotations.jar, ejb3-persistence.jar dosyalarını ekleyin. Eğer annotation yerine konfigurasyon dosyaları (*.hbm.xml) kullancaksanız o zaman bu JAR’lara gerek yok. Bu JAR’ları şu adresten indirebilirsiniz.
- Üçüncü adımda hibernate-search-4.2.0.Final dosyası içerisinden distlibprovided dizini altındaki hibernate-jpa-2.0-api-1.0.1.Final.jar dosyasını ekliyoruz.
- Son olarak da bağlanacağımız veri tabanının driver’ını ekliyoruz. Ben Oracle kullandığım için ojdbc6.jar dosyasını da CLASSPATH’ime ekliyorum.
Projemin kullandığı kütüphaneler en son aşağıdaki gibi oluyor.
Veri tabanımızda halihazırda bulunan örnek tablolardan REGIONS tablosunu kullanacağım. Hibernate’in veri tabanına bağlanabilmesi için gerekli olan konfigurasyon dosyasını yaratıyorum. Kaynak kodlarımın bulunduğu yerde yarattığımın hibernate.cfg.xml dosyası aşağıdaki gibi olacaktır. Eğer siz başka bir veri tabanına bağlanıyorsanız bağlantı ayarlarınızı değiştirmelisiniz.
[codesyntax lang=”xml” lines=”no”]
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">
org.hibernate.dialect.OracleDialect
</property>
<property name="hibernate.connection.driver_class">
oracle.jdbc.OracleDriver
</property>
<property name="hibernate.connection.url">
jdbc:oracle:thin:@localhost:1521:xe
</property>
<property name="hibernate.connection.username">
hr
</property>
<property name="hibernate.connection.password">
hr
</property>
<!-- List of XML mapping files -->
<mapping class="com.javauzmani.entities.Regions" />
</session-factory>
</hibernate-configuration>
[/codesyntax]
Alt yapımızı hazırladıktan sonra şimdi kodu yazmaya başlayalım. Önce veri tabanındaki tabloya karşılık gelen entity sınıfını yaratıyorum.
[codesyntax lang=”java” lines=”no”]
package com.javauzmani.entities;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Regions {
@Id
@Column(name = "region_id")
private int regionId;
@Column(name = "region_name")
private String regionName;
public Regions() {
super();
}
public Regions(int regionId, String regionName) {
super();
this.regionId = regionId;
this.regionName = regionName;
}
public int getRegionId() {
return regionId;
}
public void setRegionId(int regionId) {
this.regionId = regionId;
}
public String getRegionName() {
return regionName;
}
public void setRegionName(String regionName) {
this.regionName = regionName;
}
}
[/codesyntax]
Daha sonra ekleme, silme, güncelleme ve listeleme işlemlerini yapacak olan sınıfımı yazıyorum.
[codesyntax lang=”java” lines=”no”]
package com.javauzmani.dao;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import com.javauzmani.entities.Regions;
public class RegionsDAO {
static ServiceRegistry serviceRegistry = null;
static SessionFactory factory = null;
static Configuration configuration = null;
static {
try {
configuration = new Configuration().configure("hibernate.cfg.xml");
serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
factory = configuration.buildSessionFactory(serviceRegistry);
} catch (Exception e) {
e.printStackTrace();
}
}
public void addRegions(int regionId, String name) {
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Regions regions = new Regions(regionId, name);
session.save(regions);
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}
@SuppressWarnings("unchecked")
public List<Regions> listRegions() {
Session session = factory.openSession();
Transaction tx = null;
List<Regions> regions = null;
try {
tx = session.beginTransaction();
regions = session.createQuery("from Regions").list();
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
return regions;
}
public void updateRegions(Integer regionsId, String regionName) {
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Regions region = (Regions) session.get(Regions.class, regionsId);
region.setRegionName(regionName);
session.update(region);
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}
public void deleteRegions(Integer regionsId) {
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Regions region = (Regions) session.get(Regions.class, regionsId);
session.delete(region);
tx.commit();
} catch (HibernateException e) {
if (tx != null) {
tx.rollback();
}
e.printStackTrace();
} finally {
session.close();
}
}
}
[/codesyntax]
Son olarak da yazmış olduğum DAO sınıfındaki metotları çağıracak örnek bir test sınıfı yaratıyorum.
[codesyntax lang=”java” lines=”no”]
package com.javauzmani.calistir;
import java.util.List;
import com.javauzmani.dao.RegionsDAO;
import com.javauzmani.entities.Regions;
public class CrudDeneme {
public static void main(String[] args) {
RegionsDAO dao = new RegionsDAO();
List<Regions> regions = dao.listRegions();
for (Regions region : regions) {
System.out.print("Region Id : " + region.getRegionId());
System.out.print(", Region Name : " + region.getRegionName());
System.out.println();
}
}
}
[/codesyntax]
[box type=”warning”]Veri tabanı sunucunuzun açık olduğundan emin olunuz !!![/box]
Kodumuzu çalıştırdığımızda çıktı aşağıdaki gibi oluyor.