Hibernate là gì? Sao phải dùng nó thay JDBC?
Bài viết được sự cho phép của tác giả Lê Chí Dũng
- IN TERM OF là gì và cấu trúc của cụm từ IN TERM OF trong tiếng Anh
- Asp.net là gì? Cấu trúc thành phần và đặc điểm cơ bản của nền tảng này
- Khí propane là gì ? Ai có thể sử dụng propane và cho mục đích gì ?
- With All Due Respect là gì và cấu trúc With All Due Respect trong Tiếng Anh.
- Chiết Khấu Là Gì? Các Loại Chiết Khấu Hiện Nay
Nếu đã biết về JDBC thì JDBC là công cụ kết nối DB rất thô sơ được dùng từ rất lâu và có nhiều vấn đề. Hibernate ra đời nhằm giải quyết vấn đề tồn tại và tối ưu hơn.
Bạn đang xem: Hibernate là gì? Sao phải dùng nó thay JDBC?
Nội Dung
Hibernate là khỉ gì?
Hibernate là một thư viện ORM (Object Relational Mapping) mã nguồn mở giúp lập trình viên viết ứng dụng Java có thể map các objects (pojo) với hệ quản trị cơ sở dữ liệu quan hệ, và hỗ trợ thực hiện các khái niệm lập trình hướng đối tượng với cớ dữ liệu quan hệ. Hibernate Workflow Persistence object Chính là các POJO object map với các table tương ứng của cơ sở dữ liệu quan hệ. Nó như là những “thùng xe” chứa dữ liệu từ ứng dụng để ghi xuống database, hay chứa dữ liệu tải lên ứng dụng từ database. Session Factory Là một interface giúp tạo ra session kết nối đến database bằng cách đọc các cấu hình trong Hibernate configuration. Mỗi một database phải có một session factory.
Tỉ dụ nếu ta sử dụng MySQL, và Oracle cho ứng dụng Java của mình thì ta cần có một session factory cho MySQL, và một session factory cho Oracle.
Hibernate Session Mỗi một đối tượng session được Session factory tạo ra sẽ tạo một kết nối đến database. Transation Là transaction đảm bảo tính toàn vẹn của phiên làm việc với cớ sở dữ liệu. Tức là nếu có một lỗi xảy ra trong transaction thì tất cả các tác vụ thực hiện sẽ thất bại. Query Hibernate cung cấp các câu chuy vấn HQL (Hibernate Query Language) tới database và map kết quả trả về với đối tượng tương ứng của ứng dụng Java.
Nếu bạn muốn làm việc với Hibernate thử hãy xem Tutorial hướng dẫn sử dụng Hibernate cho người mới bắt đầu tại 25giay.vn
Sau phải dùng Hibernate thay JDBC
1. Object Mapping
Với JDBC ta phải map các trường trong bảng với các thuộc tính của Java object một cách “thủ công”. Với Hibernate sẽ hỗ trợ ta map một cách “tự động” thông qua các file cấu hình map XML hay sử dụng các anotation. JDBC sẽ map Java object với table như sau.
Xem thêm : ĐIỆN CHUYỂN TIỀN LÀ GÌ? QUI TRÌNH ĐIỆN CHUYỂN TIỀN
Cũng với table user đó sử dụng các anotaion để Hibernate có thể map một cách “tự động” như sau.
2. HQL
Hibernate cung cấp các câu lệnh truy vấn tương tự SQL, HQL của Hibernate hỗ trợ đầy đủ các truy vấn đa hình như, HQL “hiểu” các khái niệm như kế thừa (inheritance), đa hình (polymorphysm), và liên kết (association)
3. Database Independent
Code sử dụng Hibernate là độc lập với hệ quản trị cơ sở dữ liệu, nghĩa là ta không cần thay đổi câu lệnh HQL khi ta chuyển từ hệ quản trị CSDL MySQL sang Oracle, hay các hệ quản trị CSDL khác… Do đó rất dễ để ta thay đổi CSDL quan hệ, đơn giản bằng cách thay đổi thông tin cấu hình hệ quản trị CSDL trong file cấu hình.
Ví dụ khi ta muốn lấy 10 bản ghi dữ liệu của một table từ 2 CSDL khác nhau
Với JDBC ta có câu truy vấn như sau.
Với Hibernate câu truy vấn không thay đổi với cả 2 CSDL.
4. Minimize Code Changes
Khi ta thay đổi (thêm) cột vào bảng, Với JDBC ta phải thay đổi những gì:
- Thêm thuộc tính vào POJO class.
- Thay đổi method chứa câu truy vấn “select”, “insert”, “update” để bổ sung cột mới. Có thể có rất nhiều method, nhiều class chứa các câu truy vấn như trên. Với Hibernate ta chỉ cần:
- Thêm thuộc tính vào POJO class.
- Cập nhật Hibernate XML mapping file để thêm map column – property. Ta chỉ thay đổi duy nhất 2 file trên.
5. Lazy Loading
Xem thêm : Đơn vị sự nghiệp công lập là gì, gồm những đơn vị nào?
Với những ứng dụng Java làm việc với cơ sở dữ liệu lớn hàng trăm triệu bản ghi, việc có sử dụng Lazy loading trong truy xuất dữ liệu từ database mang lại lợi ích rất lớn. Nó giống như việc ta có thể bẻ từng chiếc đũa của bó đũa to thay vì bẻ cả bó đũa. Ví dụ những file tài liệu do người dùng upload được lưu ở bảng document. Bảng user có quan hệ một-nhiều với bảng document. Trong trường hợp này class User là class cha, class Document là class con. Bảng document nhanh chóng đầy lên theo thời gian. Mỗi khi ta lấy thông tin user và docment tương ứng từ database giả sử dữ liệu document là rất lớn, để ứng dụng không bị chậm vì phải mất nhiều bộ nhớ để chứa toàn bộ document của toàn bộ user, ta áp dụng Lazy loading cho từng user như sau.
6. Loại bỏ Try-Catch Blocks
Sử dụng JDBC nếu lỗi xảy khi tao tác với database thì sẽ có exception SQLexception bắn ra. Bởi vậy ta phải sử dụng try-catch block để xử lý ngoại lệ. Hibernate xử lý việc này giúp bạn bằng cách nó override toàn bộ JDBC exception thành Uncheck xeption, và ta không cần viết try-catch trong code của mình nữa.
7. Quản lý commit/rollback Transaction
Transaction là nhóm các hoạt động (với database) của một tác vụ. Nếu một hoạt động không thành công thì toàn bộ tác vụ không thành công. Với JDBC lập trình viên phải chủ động thực hiện commit khi toàn bộ hoạt động của tác vụ thành công, hay phải rollback khi có một hoạt động không thành công để kết thúc tác vụ. Với Hibernate thì ta không cần quan tâm đến commit hay rollback, Hibernate đã quản lý nó giúp ta rồi.
8. Hibernate Caching
Hibernate cung cấp một cơ chế bộ nhớ đệm, giúp giảm số lần truy cập vào database của ứng dụng càng nhiều càng tốt. Điều này sẽ có tác dụng tăng performance đáng kể cho ứng dụng của bạn. Hibernate lưu trữ các đối tượng trong session khi transation được kích hoạt. Khi một query được thực hiện liên tục, giá trị được lưu trữ trong session được sử dụng lại. Khi một transaction mới bắt đầu, dữ liệu được lấy lại từ database và được lưu trữ session. Hibernate cung cấp hai cấp độ Cach, mình sẽ có bài chi tiết hơn về Cach trong Hibernate.
Nếu bạn muốn làm việc với Hibernate thử hãy xem Tutorial hướng dẫn sử dụng Hibernate cho người mới bắt đầu tại 25giay.vn
Bài viết gốc được đăng tải tại 25giay.vn
Có thể bạn quan tâm:
- 9 thói quen sống bạn cần phải thay đổi để làm giàu
- Tại sao nên dùng [SerializeField] thay vì biến public?
- Tại sao phải chọn giữa R hay Python trong khi bạn có thể chọn cả 2?
Xem thêm Việc làm Developer hấp dẫn trên TopDev
Nguồn: https://25giay.vn
Danh mục: Hỏi Đáp