Hibernate - Ví dụ
Bây giờ chúng ta hãy lấy một ví dụ để hiểu cách chúng ta có thể sử dụng Hibernate để cung cấp tính bền bỉ của Java trong một ứng dụng độc lập. Chúng ta sẽ đi qua các bước khác nhau liên quan đến việc tạo một Ứng dụng Java bằng công nghệ Hibernate.
Tạo lớp học POJO
Bước đầu tiên trong việc tạo một ứng dụng là xây dựng lớp hoặc các lớp Java POJO, tùy thuộc vào ứng dụng sẽ được duy trì trong cơ sở dữ liệu. Hãy để chúng tôi xem xét của chúng tôiEmployee lớp học với getXXX và setXXX các phương thức để biến nó thành lớp tuân thủ JavaBeans.
POJO (Plain Old Java Object) là một đối tượng Java không mở rộng hoặc triển khai một số lớp và giao diện chuyên biệt theo yêu cầu của khuôn khổ EJB. Tất cả các đối tượng Java bình thường là POJO.
Khi bạn thiết kế một lớp để được duy trì bởi Hibernate, điều quan trọng là cung cấp mã tuân thủ JavaBeans cũng như một thuộc tính, sẽ hoạt động như chỉ mục như id trong lớp Nhân viên.
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;
}
}
Tạo bảng cơ sở dữ liệu
Bước thứ hai sẽ là tạo các bảng trong cơ sở dữ liệu của bạn. Sẽ có một bảng tương ứng với mỗi đối tượng, bạn sẵn sàng cung cấp tính bền bỉ. Hãy xem xét các đối tượng trên cần được lưu trữ và truy xuất vào bảng RDBMS sau:
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)
);
Tạo tệp cấu hình ánh xạ
Bước này là tạo một tệp ánh xạ hướng dẫn Hibernate cách ánh xạ lớp hoặc các lớp đã xác định vào bảng cơ sở dữ liệu.
<?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>
Bạn nên lưu tài liệu ánh xạ trong một tệp có định dạng <classname> .hbm.xml. Chúng tôi đã lưu tài liệu ánh xạ của mình trong tệp Employee.hbm.xml. Hãy cho chúng tôi xem chi tiết nhỏ về tài liệu lập bản đồ -
Tài liệu ánh xạ là tài liệu XML có <hibernate-mapping> làm phần tử gốc chứa tất cả các phần tử <class>.
Các <class>các phần tử được sử dụng để xác định các ánh xạ cụ thể từ một lớp Java đến các bảng cơ sở dữ liệu. Tên lớp Java được chỉ định bằng cách sử dụngname thuộc tính của phần tử lớp và tên bảng cơ sở dữ liệu được chỉ định bằng cách sử dụng table thuộc tính.
Các <meta> phần tử là phần tử tùy chọn và có thể được sử dụng để tạo mô tả lớp.
Các <id>phần tử ánh xạ thuộc tính ID duy nhất trong lớp với khóa chính của bảng cơ sở dữ liệu. Cácname thuộc tính của phần tử id đề cập đến thuộc tính trong lớp và columnthuộc tính tham chiếu đến cột trong bảng cơ sở dữ liệu. Cáctype thuộc tính giữ kiểu ánh xạ ngủ đông, kiểu ánh xạ này sẽ chuyển đổi từ kiểu dữ liệu Java sang SQL.
Các <generator>phần tử bên trong phần tử id được sử dụng để tự động tạo các giá trị khóa chính. Cácclass thuộc tính của phần tử trình tạo được đặt thành native để ngủ đông nhặt một trong hai identity, sequence hoặc là hilo thuật toán tạo khóa chính tùy thuộc vào khả năng của cơ sở dữ liệu bên dưới.
Các <property>phần tử được sử dụng để ánh xạ một thuộc tính lớp Java vào một cột trong bảng cơ sở dữ liệu. Cácname thuộc tính của phần tử đề cập đến thuộc tính trong lớp và columnthuộc tính tham chiếu đến cột trong bảng cơ sở dữ liệu. Cáctype thuộc tính giữ kiểu ánh xạ ngủ đông, kiểu ánh xạ này sẽ chuyển đổi từ kiểu dữ liệu Java sang SQL.
Có sẵn các thuộc tính và phần tử khác, sẽ được sử dụng trong tài liệu lập bản đồ và tôi sẽ cố gắng đề cập nhiều nhất có thể trong khi thảo luận về các chủ đề liên quan đến Hibernate khác.
Tạo lớp ứng dụng
Cuối cùng, chúng ta sẽ tạo lớp ứng dụng của mình với phương thức main () để chạy ứng dụng. Chúng tôi sẽ sử dụng ứng dụng này để lưu một số hồ sơ của Nhân viên và sau đó chúng tôi sẽ áp dụng các hoạt động CRUD trên các hồ sơ đó.
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();
}
}
}
Biên dịch và Thực hiện
Dưới đây là các bước để biên dịch và chạy ứng dụng được đề cập ở trên. Đảm bảo rằng bạn đã đặt PATH và CLASSPATH thích hợp trước khi tiếp tục biên dịch và thực thi.
Tạo tệp cấu hình hibernate.cfg.xml như được giải thích trong chương cấu hình.
Tạo tệp ánh xạ Employee.hbm.xml như hình trên.
Tạo tệp nguồn Employee.java như hình trên và biên dịch nó.
Tạo tệp nguồn ManageEaffee.java như hình trên và biên dịch nó.
Thực thi lệnh nhị phân ManageE Jobee để chạy chương trình.
Bạn sẽ nhận được kết quả sau và các bản ghi sẽ được tạo trong bảng NHÂN VIÊN.
$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
Nếu bạn kiểm tra bảng EMPLOYEE của mình, bảng này sẽ có các bản ghi sau:
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>