11 Hibernate là gì? Tất tần tật kiến thức liên quan về Hibernate

Không có giới hạn nào đối với kỹ năng lập trình của bạn. Nếu thường xuyên sử dụng ngôn ngữ lập trình Java, chắc hẳn bạn đã nghe đến cái tên Hibernate. Tất nhiên chúng ta đều biết đây là công cụ hỗ trợ cho các phần mềm phát triển từ Java. Tuy nhiên, bạn nên hiểu các khái niệm, cách nó được xây dựng và cách sử dụng nó. Bằng cách đó bạn có thể tận dụng tối đa. Các bài viết sau của Aptech sẽ giúp bạn khám phá những tính năng cơ bản nhất của Java Hibernate.

Hibernate là gì?

Hibernate là một dạng khung ORM hoạt động phục vụ trong persistence layer. Sự phát triển của nó giúp người dùng giảm bớt một số công việc liên quan đến persistence layer. Nhiệm vụ chính của nó là viết mã bằng ngôn ngữ lập trình Java. Các mã này giúp cho các đối tượng – object (POJO) có thể map được với các hệ thống quản lý cơ sở dữ liệu quan hệ (database). Ngoài ra, nó cũng hỗ trợ cho người dùng phát triển các khái niệm lập trình hướng đối tượng bằng cách sử dụng cơ sở dữ liệu.

Cấu tạo

Kiến trúc của Hibernate trong Java Application bao gồm nhiều đối tượng khác nhau, để hiểu rõ nhất bạn cần nắm chắc về cấu tạo của các đối tượng. Cụ thể:

Cấu tạo của Hibernate 

Persistence Object

Persistent Object được hiểu là một kho dùng để lưu trữ dữ liệu. Nó giúp tập trung dữ liệu được tải từ cơ sở dữ liệu đến ứng dụng và ngược lại. Các đối tượng Persistence cũng là các đối tượng POJO mà Hibernate map với các hệ thống quản trị cơ sở dữ liệu quan hệ.

Configuration

Configuration là đối tượng đầu tiên được nhìn thấy khi khởi tạo một Hibernate. Người dùng chỉ cần tạo một lần là Configuration sẽ hiển thị mãi mãi trong ứng dụng. Configuration được hiểu là một tệp cấu hình có điều kiện hoặc thuộc tính mong muốn. Configuration bao gồm hai bộ phận như sau:

  • Database Connection: Đây là bộ phận để kết nối với cơ sở dữ liệu, Configuration sử dụng một hoặc nhiều tệp cấu hình có dạng hibernate.properties và hibernate.cfg.xml.
  • Class Mapping Setup: Đây là bộ phận chịu trách nhiệm tạo kết nối giữa Hibernate và cơ sở dữ liệu (database)

Session Factory 

Sessionfactory là giao diện kết nối với cơ sở dữ liệu thông qua việc đọc Configuration. Mỗi cơ sở dữ liệu đều có yêu cầu về một Sessionfactory riêng biệt. Vì vậy, nếu bạn muốn sử dụng nhiều cơ sở dữ liệu như MySQL hay Oracle cùng một lúc, bạn nên tạo một Sessionfactory riêng cho MySQL và một Sessionfactory khác cho Oracle. Tuy nhiên, Sessionfactory có đặc điểm là năng và an toàn vậy nên Sessionfactory thường được tạo trong quá quá trình khởi động và lưu trữ lại để dùng sau khi cần.

Hibernate Session

Vì Sessionfactory là một đối tượng nặng và khó có thể sử dụng thường xuyên. Chính vì vậy mà Sessionfactory sẽ chủ động tạo ra các Hibernate với các thuộc tính đơn giản được sử dụng để thiết lập kết nối vật lý với cơ sở dữ liệu. Mặc dù vậy, Session không an toàn khi sử dụng nên người dùng chỉ nên tạo chúng khi cần và đóng ngay sau khi đã hoàn thành công việc.

Ví dụ về Hibernate

Transaction

Transaction được sử dụng như đại diện cho một đơn vị công việc trong cơ sở dữ liệu. Các transaction chịu trách nhiệm hoạt động bảo vệ tính toàn vẹn của các thao tác của cơ sở dữ liệu. Tất cả các tác vụ sẽ tự động chạy lại nếu quá trình không may bị lỗi. Transaction có thể được sử dụng làm giao diện hoặc mã code.

Query

Query lấy thông tin từ cơ sở dữ liệu và khởi tạo đối tượng thông qua SQL (Native SQL) hay Hibernate Query Language (HQL).

Criteria

Quá trình lấy dữ liệu từ cơ sở dữ liệu cũng cần một số điều kiện nhất định. Các tiêu chí được sử dụng làm đối tượng để tạo và thực hiện các yêu cầu truy vấn.

Có thể bạn quan tâm:

Tại sao nên sử dụng Hibernate?

Hibernate được sử dụng phổ biến bởi chúng mang nhiều ưu điểm tuyệt vời khác. Cụ thể:

  • Là mã nguồn mở và nhẹ. Hệ thống được cấp phép bởi LGPL để công nhận lợi ích này.
  • C bộ nhớ đệm bên trong nên hiệu quả công việc rất cao. Hai loại bộ nhớ cache cấp 1 và cache cấp 2 giúp thao tác nhanh và ngắn. 
  • Có tính độc lập rất mạnh. Vì vậy, người dùng không phải lo lắng về việc viết lại các truy vấn khi thay đổi cơ sở dữ liệu. Ưu điểm này cũng giúp hạn chế lỗi xảy ra trong quá trình bảo trì khi cần thay đổi truy vấn.
  • Giúp quá trình thao tác với cơ sở dữ liệu dễ dàng hơn rất nhiều. Bạn có thể thay thế các bước thủ công và tự động tạo bảng dữ liệu. Hibernate cũng đơn giản hóa việc truy cập dữ liệu và tải các lệnh.
  • Đạt độ tin cậy cao qua thử nghiệm. Kết quả cho thấy quá trình truy vấn của nó hầu như không có lỗi.

Những lý do nên sử dụng Hibernate thay JDBC?

Object Mapping

JDBC yêu cầu bạn phải map các trường trong bảng thuộc tính của đối tượng Java một cách “thủ công”. Ngược lại, với Hibernate, phần mềm sẽ hỗ trợ người dùng lập bản đồ “tự động” bằng cách sử dụng các file cấu hình bản đồ XML hoặc các annotation. 

JDBC sẽ map Java Object một cách “thủ công” 
JDBC sẽ map Java Object một cách “thủ công”

Hibernate có thể map một cách "tự động" 

HQL

Hibernate cung cấp các câu lệnh truy vấn giống như SQL. HQL hỗ trợ các truy vấn đa hình có thể kể tới như HQL “hiểu” được những khái niệm về inheritance hay còn hiểu là kế thừa, polymorphysm có nghĩa là đa hình và association mang ý nghĩa liên kết Dưới đây là một ví dụ về câu lệnh HQL giúp bạn hiểu rõ hơn, cụ thể:

Ví dụ về câu lệnh HQL

Database Independent

Mã code sử ​​dụng trong Hibernate là độc lập với hệ thống quản lý cơ sở dữ liệu. Điều này có nghĩa là bạn không phải thay đổi các câu lệnh HQL của mình khi chuyển từ MySQL sang Oracle hoặc bất kỳ hệ quản trị cơ sở dữ liệu nào khác. Do đó, việc thay đổi sử cơ sở dữ liệu quan hệ vô cùng dễ dàng và đơn giản, bạn chỉ cần thay đổi thông tin cấu hình hệ quản trị cơ sở dữ liệu có trong tệp cấu hình.

Để dễ hiểu, với ví dụ muốn lấy 10 bản ghi dữ liệu của một table từ 2 cơ sở dữ liệu khác nhau. Đây là hai cách truy vấn của JDBC và Hibernate. Cụ thể như sau:

Câu truy vấn tại JDBC

Câu truy vấn tại Hibernate không làm thay đổi với cả 2 CSDL

Lazy Loading 

Đối với các ứng dụng Java làm việc với cơ sở dữ liệu lớn chứa hàng trăm triệu bản ghi, sử dụng Lazy loading mang lại nhiều lợi ích đáng kể trong việc truy cập dữ liệu từ cơ sở dữ liệu. Để dễ hiểu hơn ta có ví dụ như sau: các tệp tài liệu do người dùng tải lên được lưu trữ trong bảng tài liệu. Bảng user có mối quan hệ một-nhiều với bảng Tài liệu. Trong trường hợp này, class User là class cha, class Document là class con. Theo thời gian thì Bảng tài liệu sẽ được lấp đầy nhanh chóng. Giả sử rằng mỗi lần bạn truy xuất thông tin người dùng và tài liệu tương ứng từ cơ sở dữ liệu, dữ liệu tài liệu sẽ rất lớn. Vậy nên để ứng dụng của bạn không bị chậm vì phải mất một lượng lớn bộ nhớ cần thiết để lưu trữ toàn bộ tài liệu của user. Người dùng sẽ áp dụng Lazy Loading cho từng user, cụ thể như sau:

Câu lệnh áp dụng Lazy Loading cho từng user 

Bài viết trên đây là toàn bộ thông tin liên quan tới Hibernate như định nghĩa, cấu trúc và lợi ích mà dạng khung ORM này mang lại, ngoài ra còn giải đáp cho bạn câu hỏi vì sao nên sử dụng chúng thay vì JDBC. Mong rằng thông qua bài viết này với những thông tin mà chúng tôi cung cấp sẽ giúp bạn áp dụng được chúng vào trong công việc của bản thân một cách hữu ích. Nếu có bất kỳ thắc mắc hay câu hỏi liên quan tới bài viết hay lịch học aptech, học phí aptech, tuyển sinh aptech, khóa học aptech,… vui lòng liên hệ với chúng tôi thông qua địa chỉ trang web hoặc số hotline bạn nhé!

FPT Aptech trực thuộc Tổ chức Giáo dục FPT có hơn 25 năm kinh nghiệm đào tạo lập trình viên quốc tế tại Việt Nam, và luôn là sự lựa chọn ưu tiên của các sinh viên và nhà tuyển dụng.
0981578920
icons8-exercise-96