Hibernate CRUD İşlemleri
Merhaba arkadaşlar bu yazımda hibernate ile crud işlemlerinden bahsedeceğim.Şimdi Eclipse'i açıp Hibernate1 adında bir java projesi oluşturalım.Projenin üzerine gelip sağ tık yapıp configure seçeneğinden Convert to Maven Project diyoruz.Daha sonra pom.xml i açıp dependency lerimizi ekleyelim.
<dependencies> | |
<dependency> | |
<groupId>org.hibernate</groupId> | |
<artifactId>hibernate-core</artifactId> | |
<version>5.2.6.Final</version> | |
</dependency> | |
<dependency> | |
<groupId>org.hibernate</groupId> | |
<artifactId>hibernate-entitymanager</artifactId> | |
<version>5.2.6.Final</version> | |
</dependency> | |
<dependency> | |
<groupId>mysql</groupId> | |
<artifactId>mysql-connector-java</artifactId> | |
<version>5.1.37</version> | |
</dependency> | |
</dependencies> |
pom.xml i ayarladıktan sonra alttaki resimdeki gibi package ve classlarımızı oluşturalım.
Daha sonra hibernate.cfg.xml i açıp veritabanına bağlantı kısmını ayarlayacağız.Buradaki ayarları kendi mysql ayarlarınıza göre düzenlemeyi unutmayını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> | |
<!-- Database connection settings --> | |
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> | |
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> | |
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate</property> | |
<property name="hibernate.connection.username">root</property> | |
<property name="hibernate.connection.password"></property> | |
<!-- Disable the second-level cache --> | |
<property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> | |
<!-- Tüm yürütülen sql'leri consolda yazar --> | |
<property name="show_sql">true</property> | |
<!--update seçeneği tablo varsa tablomuzu silip yeniden oluşturmaz üstüne ekler--> | |
<!--update yerine create yazarsak her çalıştırdığımızda tablomuzu silip yeniden oluşturur --> | |
<property name="hbm2ddl.auto">update</property> | |
<!-- Entity classımızı tanımlıyoruz --> | |
<mapping class="hibernate.model.User"/> | |
</session-factory> | |
</hibernate-configuration> |
Şimdi kodlamaya başlayabiliriz.User classımızı açıyoruz ve modelimizi oluşturuyoruz.İki seçeneğimiz var birincisi veritabanındaki tabloya göre User classımızı oluşturmamız.İkinci seçenek ise benim kullandığım gibi tablo oluşturma işlemini hibernate e bırakmak.Aşağıdaki gibi User classımızı oluşturup programı çalıştırdığımızda önce tabloyu User classına göre oluşturur sonra CRUD işlemleri gerçekleşir.
package hibernate.model; | |
import javax.persistence.Entity; | |
import javax.persistence.GeneratedValue; | |
import javax.persistence.GenerationType; | |
import javax.persistence.Id; | |
@Entity | |
public class User { | |
@Id | |
@GeneratedValue(strategy=GenerationType.TABLE) //AUTO_INCREMENT id oluşturmak için | |
private int id; | |
private String name; | |
private String surname; | |
// getter-setter işlemlerini yapıyoruz | |
public int getId() { | |
return id; | |
} | |
public void setId(int id) { | |
this.id = id; | |
} | |
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; | |
} | |
} |
Şimdi HibernateUtility classını açıyoruz ve session ımızı oluşturalım.SessionFactory session objesini oluşturabilmek için kullanılan bir factory(fabrika) sınıfıdır . Uygulama başlarken oluşturulur ve uygulama devam ettiği sürece tek bir SessionFactory objesi kullanılır.
package hibernate.utility; | |
import org.hibernate.Session; | |
import org.hibernate.SessionFactory; | |
import org.hibernate.cfg.Configuration; | |
public class HibernateUtility { | |
private final static SessionFactory sf = new Configuration() | |
.configure("hibernate.cfg.xml").buildSessionFactory(); | |
private volatile static Session session = sf.openSession(); | |
private HibernateUtility() { | |
} | |
public static Session getHibernateSession() { | |
if(session == null) { | |
session = (Session) new HibernateUtility(); | |
} | |
return session; | |
} | |
} |
Daha sonra UserDAO interface imizi açıyoruz ve metodlarımızı tanımlıyoruz.İnterfaceler genellikle bir sınıfın belirli metodlarını tanımlamaya ve içini kendi özelliklerine göre doldurmaya zorlamak için kullanılır.
package hibernate.interfaces; | |
import java.util.List; | |
import hibernate.model.User; | |
public interface UserDAO { | |
public User insertUser(User u); | |
public List<User> getAllUsers(); | |
public void updateUser(int id,String name); | |
public void removeUser(int id); | |
public User findUser(int id); | |
} |
Şimdi UserDAOImpl classını açıyoruz ve UserDAO interface inden implemets ediyoruz.Metodları implement etmemiz için uyarı alacağız.Metodlarımızı implement ettikten sonra HibernateUtility classından session oluşturup CRUD işlemlerini yapacağımız metodları yazıyoruz.
package hibernate.implement; | |
import java.util.List; | |
import java.util.Iterator; | |
import org.hibernate.HibernateException; | |
import org.hibernate.Session; | |
import hibernate.interfaces.UserDAO; | |
import hibernate.model.User; | |
import hibernate.utility.HibernateUtility; | |
public class UserDAOImpl implements UserDAO{ | |
Session session = HibernateUtility.getHibernateSession(); | |
/* Veritabanında yeni bir user oluşturduğumuz metod */ | |
@Override | |
public User insertUser(User u) { | |
try{ | |
System.out.println(u.getName()); | |
session.beginTransaction(); | |
session.persist(u); | |
session.getTransaction().commit(); | |
} | |
catch (HibernateException e) { | |
if (session.getTransaction()!=null) session.getTransaction().rollback(); | |
e.printStackTrace(); | |
} | |
return u; | |
} | |
/* Veritabanındaki tüm userları listelediğimiz metod */ | |
@Override | |
public List<User> getAllUsers() { | |
List<User> users=null; | |
try{ | |
session.beginTransaction(); | |
users = session.createQuery("FROM u User").list(); | |
for (Iterator<User> iterator = | |
users.iterator(); iterator.hasNext();){ | |
User user = (User) iterator.next(); | |
System.out.print("First Name: " + user.getName()+"\t"); | |
System.out.print(" Last Name: " + user.getSurname()+"\n"); | |
} | |
} | |
catch (HibernateException e) { | |
if (session.getTransaction()!=null) session.getTransaction().rollback(); | |
e.printStackTrace(); | |
} | |
return users; | |
} | |
/* Id sini verdiğimiz userın adını güncellediğimiz metod */ | |
@Override | |
public void updateUser(int id, String name){ | |
try{ | |
session.beginTransaction(); | |
User user = session.get(User.class, id); | |
user.setName(name); | |
session.update(user); | |
session.getTransaction().commit(); | |
} | |
catch (HibernateException e) { | |
if (session.getTransaction()!=null) session.getTransaction().rollback(); | |
e.printStackTrace(); | |
} | |
} | |
/* Id sini verdiğimiz userı veritabanından sildiğimiz metod */ | |
@Override | |
public void removeUser(int id) { | |
try{ | |
User user = session.get(User.class, id); | |
session.delete(user); | |
session.getTransaction().commit(); | |
} | |
catch (HibernateException e) { | |
if (session.getTransaction()!=null) session.getTransaction().rollback(); | |
e.printStackTrace(); | |
} | |
} | |
/* Id sini verdiğimiz userın bilgilerini getirdiğimiz metod */ | |
@Override | |
public User findUser(int id) { | |
User user=session.get(User.class, id); | |
System.out.println("adı : "+user.getName()+" soyadı :"+user.getSurname()); | |
return user; | |
} | |
} |
Şimdi yazdığımız metodların çalıştığını kontrol etmek için HibernateTest classımızı açıyoruz.
package hibernate.test; | |
import hibernate.implement.UserDAOImpl; | |
import hibernate.model.User; | |
public class HibernateTest { | |
public static void main(String[] args) { | |
UserDAOImpl userDAOImpl=new UserDAOImpl(); | |
User user =new User(); | |
/* user ekleme */ | |
user.setName("oktay"); | |
user.setSurname("uyar"); | |
userDAOImpl.insertUser(user); | |
/* userları listeleme */ | |
userDAOImpl.getAllUsers(); | |
/* user güncelleme */ | |
userDAOImpl.updateUser(7, "oktay"); | |
/* user silme */ | |
userDAOImpl.removeUser(10); | |
/* user bilgilerini getirme */ | |
user=null; | |
userDAOImpl.findUser(4); | |
} | |
} |
Projenin çıktısını aşağıda görebilirsiniz.
Projenin kaynak koduna buraya tıklayarak ulaşabilirisiniz