Hazırda Bekletme - Örnekler
Şimdi, bağımsız bir uygulamada Java kalıcılığı sağlamak için Hibernate'i nasıl kullanabileceğimizi anlamak için bir örnek alalım. Hibernate teknolojisini kullanarak bir Java Uygulaması oluşturmanın farklı adımlarından geçeceğiz.
POJO Sınıfları Oluşturun
Bir uygulama oluşturmanın ilk adımı, veritabanında kalıcı olacak uygulamaya bağlı olarak Java POJO sınıfını veya sınıflarını oluşturmaktır. Düşünelim bizimEmployee ile sınıf getXXX ve setXXX JavaBeans uyumlu sınıf yapma yöntemleri.
Bir POJO (Düz Eski Java Nesnesi), sırasıyla EJB çerçevesinin gerektirdiği bazı özel sınıfları ve arayüzleri genişletmeyen veya uygulamayan bir Java nesnesidir. Tüm normal Java nesneleri POJO'dur.
Hibernate tarafından kalıcı olacak bir sınıf tasarladığınızda, JavaBeans uyumlu kodun yanı sıra dizin olarak çalışacak bir öznitelik sağlamak önemlidir. id Employee sınıfındaki öznitelik.
public class Employee {
private int id;
private String firstName;
private String lastName;
private int salary;
public Employee() {}
public Employee(String fname, String lname, int salary) {
this.firstName = fname;
this.lastName = lname;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName( String first_name ) {
this.firstName = first_name;
}
public String getLastName() {
return lastName;
}
public void setLastName( String last_name ) {
this.lastName = last_name;
}
public int getSalary() {
return salary;
}
public void setSalary( int salary ) {
this.salary = salary;
}
}
Veritabanı Tabloları Oluşturun
İkinci adım, veritabanınızda tablolar oluşturmak olacaktır. Her nesneye karşılık gelen bir tablo olacaktır, kalıcılık sağlamaya istekli olursunuz. Yukarıdaki nesnelerin aşağıdaki RDBMS tablosunda depolanması ve geri alınması gerektiğini düşünün -
create table EMPLOYEE (
id INT NOT NULL auto_increment,
first_name VARCHAR(20) default NULL,
last_name VARCHAR(20) default NULL,
salary INT default NULL,
PRIMARY KEY (id)
);
Eşleme Yapılandırma Dosyası Oluşturun
Bu adım, Hibernate'e tanımlanan sınıfı veya sınıfları veritabanı tablolarıyla nasıl eşleştireceğini bildiren bir eşleme dosyası oluşturmaktır.
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name = "Employee" table = "EMPLOYEE">
<meta attribute = "class-description">
This class contains the employee detail.
</meta>
<id name = "id" type = "int" column = "id">
<generator class="native"/>
</id>
<property name = "firstName" column = "first_name" type = "string"/>
<property name = "lastName" column = "last_name" type = "string"/>
<property name = "salary" column = "salary" type = "int"/>
</class>
</hibernate-mapping>
Eşleme belgesini <sınıfadı> .hbm.xml biçiminde bir dosyaya kaydetmelisiniz. Eşleştirme belgemizi Employee.hbm.xml dosyasına kaydettik. Haritalama belgesi hakkında çok az ayrıntı görelim -
Eşleme belgesi, tüm <class> öğelerini içeren kök öğe olarak <hibernate-mapping> içeren bir XML belgesidir.
<class>öğeleri, bir Java sınıfından veritabanı tablolarına belirli eşlemeleri tanımlamak için kullanılır. Java sınıf adı,name sınıf öğesinin özniteliği ve veritabanı tablo adı, table öznitelik.
<meta> öğesi isteğe bağlı bir öğedir ve sınıf açıklamasını oluşturmak için kullanılabilir.
<id>öğesi, sınıftaki benzersiz kimlik özniteliğini veritabanı tablosunun birincil anahtarıyla eşler. name id öğesinin özniteliği, sınıftaki özelliğe ve columnöznitelik veritabanı tablosundaki sütunu ifade eder. type özniteliği hazırda bekletme eşleme türünü tutar, bu eşleme türleri Java'dan SQL veri türüne dönüştürülür.
<generator>id öğesi içindeki öğe, birincil anahtar değerlerini otomatik olarak oluşturmak için kullanılır. class oluşturucu öğenin özniteliği şu şekilde ayarlanır: native hazırda bekletmenin ikisini de açmasına izin vermek için identity, sequence veya hilo temel veritabanının yeteneklerine bağlı olarak birincil anahtar oluşturmak için algoritma.
<property>öğesi, bir Java sınıfı özelliğini veritabanı tablosundaki bir sütuna eşlemek için kullanılır. name öğenin özniteliği sınıftaki özelliğe ve columnöznitelik veritabanı tablosundaki sütunu ifade eder. type özniteliği hazırda bekletme eşleme türünü tutar, bu eşleme türleri Java'dan SQL veri türüne dönüştürülür.
Bir haritalama belgesinde kullanılacak olan başka nitelikler ve unsurlar da vardır ve diğer Hazırda Bekletme ile ilgili konuları tartışırken olabildiğince fazlasını ele almaya çalışacağım.
Uygulama Sınıfı Oluşturun
Son olarak, uygulamayı çalıştırmak için main () yöntemiyle uygulama sınıfımızı oluşturacağız. Bu uygulamayı birkaç Çalışan kaydını kaydetmek için kullanacağız ve ardından bu kayıtlara CRUD işlemlerini uygulayacağız.
import java.util.List;
import java.util.Date;
import java.util.Iterator;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class ManageEmployee {
private static SessionFactory factory;
public static void main(String[] args) {
try {
factory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
ManageEmployee ME = new ManageEmployee();
/* Add few employee records in database */
Integer empID1 = ME.addEmployee("Zara", "Ali", 1000);
Integer empID2 = ME.addEmployee("Daisy", "Das", 5000);
Integer empID3 = ME.addEmployee("John", "Paul", 10000);
/* List down all the employees */
ME.listEmployees();
/* Update employee's records */
ME.updateEmployee(empID1, 5000);
/* Delete an employee from the database */
ME.deleteEmployee(empID2);
/* List down new list of the employees */
ME.listEmployees();
}
/* Method to CREATE an employee in the database */
public Integer addEmployee(String fname, String lname, int salary){
Session session = factory.openSession();
Transaction tx = null;
Integer employeeID = null;
try {
tx = session.beginTransaction();
Employee employee = new Employee(fname, lname, salary);
employeeID = (Integer) session.save(employee);
tx.commit();
} catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
return employeeID;
}
/* Method to READ all the employees */
public void listEmployees( ){
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
List employees = session.createQuery("FROM Employee").list();
for (Iterator iterator = employees.iterator(); iterator.hasNext();){
Employee employee = (Employee) iterator.next();
System.out.print("First Name: " + employee.getFirstName());
System.out.print(" Last Name: " + employee.getLastName());
System.out.println(" Salary: " + employee.getSalary());
}
tx.commit();
} catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
/* Method to UPDATE salary for an employee */
public void updateEmployee(Integer EmployeeID, int salary ){
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Employee employee = (Employee)session.get(Employee.class, EmployeeID);
employee.setSalary( salary );
session.update(employee);
tx.commit();
} catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
/* Method to DELETE an employee from the records */
public void deleteEmployee(Integer EmployeeID){
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
Employee employee = (Employee)session.get(Employee.class, EmployeeID);
session.delete(employee);
tx.commit();
} catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
}
}
Derleme ve Yürütme
İşte yukarıda belirtilen uygulamayı derlemek ve çalıştırmak için adımlar. Derleme ve yürütme için ilerlemeden önce PATH ve CLASSPATH'ı uygun şekilde ayarladığınızdan emin olun.
Yapılandırma bölümünde açıklandığı gibi hibernate.cfg.xml yapılandırma dosyasını oluşturun.
Employee.hbm.xml eşleme dosyasını yukarıda gösterildiği gibi oluşturun.
Employee.java kaynak dosyasını yukarıda gösterildiği gibi oluşturun ve derleyin.
ManageEmployee.java kaynak dosyasını yukarıda gösterildiği gibi oluşturun ve derleyin.
Programı çalıştırmak için ManageEmployee ikili dosyasını çalıştırın.
Aşağıdaki sonucu alırsınız ve kayıtlar EMPLOYEE tablosunda oluşturulur.
$java ManageEmployee
.......VARIOUS LOG MESSAGES WILL DISPLAY HERE........
First Name: Zara Last Name: Ali Salary: 1000
First Name: Daisy Last Name: Das Salary: 5000
First Name: John Last Name: Paul Salary: 10000
First Name: Zara Last Name: Ali Salary: 5000
First Name: John Last Name: Paul Salary: 10000
EMPLOYEE tablonuzu kontrol ederseniz, aşağıdaki kayıtlara sahip olmalıdır -
mysql> select * from EMPLOYEE;
+----+------------+-----------+--------+
| id | first_name | last_name | salary |
+----+------------+-----------+--------+
| 29 | Zara | Ali | 5000 |
| 31 | John | Paul | 10000 |
+----+------------+-----------+--------+
2 rows in set (0.00 sec
mysql>