Nếu là một người đang học hoặc thường xuyên sử dụng ngôn ngữ Java, chắc chắn bạn đã nghe đến thuật ngữ Hibernate. Hibernate là công cụ hỗ trợ các phần mềm được xây dựng và phát triển từ Java. Tuy nhiên, không phải ai cũng hiểu rõ khái niệm Hibernate là gì, ưu điểm và cách sử dụng Hibernate trong Java. ICANTECH giúp bạn có thể hiểu và tận dụng tối đa công dụng của Hibernate thông qua bài viết này.
Ở phần đầu tiên của bài viết, chúng ta sẽ cùng nhau tìm hiểu tổng quan Hibernate là gì hay Java Hibernate là gì.
Hibernate là một framework ORM (Object-Relational Mapping) hiệu suất cao được để lưu các đối tượng trong Java vào hệ thống cơ sở dữ liệu. Hibernate cung cấp các tác vụ như truy vấn cho các thao tác CRUD (Create, Read, Update, Delete), hay thiết lập kết nối đến cơ sở dữ liệu…
Hibernate giúp phát triển logic bền vững, lưu trữ và xử lý dữ liệu để sử dụng được lâu hơn. Hibernate rất nhẹ và đặc biệt là có mã nguồn mở - đây là lợi thế của nó so với các framework khác.
Hibernate có 3 thành phần cơ bản khác nhau, đó là:
Dưới đây là một số ưu điểm nổi bật của Hibernate:
Sau khi đã cùng tìm hiểu Hibernate là gì, tiếp theo chúng ta sẽ làm một ví dụ để hiểu cách sử dụng Hibernate. ICANTECH sẽ hướng dẫn bạn từng bước thực hiện để có thể tạo 1 ứng dụng Java với Hibernate.
Bước đầu tiên bạn cần làm là xây dựng lớp hoặc các lớp Java POJO (Plain Old Java Object) dựa vào ứng dụng sẽ được lưu vào cơ sở dữ liệu. Dưới đây là ví dụ cách tạo lớp Employee bằng các phương thức getXXX và setXXX và trở thành lớp tuân thủ JavaBeans.
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;
}
}
Bước thứ hai bạn cần làm là tạo bảng trong cơ sở dữ liệu tương ứng với từng đối tượng. Hãy xem ví dụ các đối tượng ở phần trên cần được lưu trữ và truy xuất vào bảng RDBMS:
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)
);
Bạn tạo một tệp map để hướng dẫn Hibernate cách map lớp vào các bảng cơ sở dữ liệu. Bạn nên lưu tài liệu map vào một tệp có định dạng <classname>.hbm.xml.
<?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>
Cuối cùng để chạy ứng dụng, bạn cần tạo lớp ứng dụng bằng phương thức main(). Dưới đây là ví dụ cách sử dụng ứng dụng để lưu hồ sơ đồng thời áp dụng các thao tác 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();
}
}
}
Để thực hiện biên dịch và chạy ứng dụng đã được tạo ở trên, bạn thực hiện các bước dưới đây:
Bạn sẽ nhận được kết quả và các bản ghi sẽ được tạo trong bảng Employee như sau:
$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
Khi bạn kiểm tra bảng Employee của mình 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>
Bài viết trên đây là toàn bộ thông tin bạn cần biết về Hibernate là gì và những ưu điểm của công cụ này. Bên cạnh đó, thông qua bài viết, ICANTECH đã hướng dẫn bạn cách tạo ứng dụng Java với Hibernate đơn giản, dễ hiểu.
Mong rằng với những thông tin mà ICANTECH chia sẻ, bạn đã có thêm kiến thức và kinh nghiệm để áp dụng vào học tập cũng như công việc của mình.
Cảm ơn bạn đã đọc bài viết, nếu bạn đang quan tâm đến học lập trình thì hãy tham khảo ngay các khóa học lập trình dưới đây tại ICANTECH nhé!
Nguồn ảnh: ICANTECH.