Bài viết được sự cho phép của tác giả le chi dung
Nếu bạn biết jdbc thì jdbc là một công cụ kết nối db rất cơ bản, nó đã được sử dụng từ lâu và có nhiều vấn đề. hibernate được sinh ra để giải quyết các vấn đề hiện có và tối ưu hóa.
Ngủ đông là 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.
Ví dụ: nếu chúng tôi sử dụng mysql và oracle cho ứng dụng java của mình, thì chúng tôi cần một nhà máy phiên cho mysql và một nhà máy phiên cho oracle.
Phiên ngủ đông Mỗi đối tượng phiên do nhà máy phiên tạo ra sẽ tạo kết nối với cơ sở dữ liệu. chuyển đổi là một giao dịch đảm bảo tính toàn vẹn của phiên với cơ sở dữ liệu. tức là nếu có lỗi trong giao dịch thì tất cả các tác vụ thực thi sẽ không thành công. truy vấn Hibernate cung cấp truy vấn hql (ngôn ngữ truy vấn ngủ đông) cho cơ sở dữ liệu và ánh xạ kết quả trả về tới các đối tượng ứng dụng java tương ứng.
Nếu bạn muốn sử dụng chế độ ngủ đông, hãy xem hướng dẫn về chế độ ngủ đông cho người mới bắt đầu trên lcdung.top
Phải sử dụng hibernate thay vì jdbc
1. Ánh xạ đối tượng
Với jdbc, chúng ta phải ánh xạ “thủ công” các trường trong bảng với các thuộc tính của đối tượng java. với hibernate sẽ cho phép chúng tôi ánh xạ các tệp cấu hình thông qua xml hoặc sử dụng các chú thích để “tự động” lập bản đồ. jdbc ánh xạ các đối tượng java vào các bảng như hình dưới đây.
Sử dụng các chú thích cho cùng một bảng người dùng để chế độ ngủ đông có thể “tự động” ánh xạ như sau.
2. hql
hibernate cung cấp các câu lệnh truy vấn tương tự như sql, hql của hibernate hỗ trợ đầy đủ các truy vấn đa hình, chẳng hạn như các khái niệm hql “hiểu” như kế thừa, đa hình, liên kết, v.v.
3. Cơ sở dữ liệu độc lập
Mã sử dụng hibernate độc lập với hệ quản trị cơ sở dữ liệu, có nghĩa là chúng ta không cần sửa đổi câu lệnh hql khi chuyển từ mysql sang oracle hoặc các hệ quản trị cơ sở dữ liệu khác … Để thay đổi cơ sở dữ liệu quan hệ, chỉ trong tập tin cấu hình Bạn có thể thay đổi thông tin cấu hình của hệ quản trị cơ sở dữ liệu.
Ví dụ: khi chúng tôi muốn nhận 10 bản ghi dữ liệu của một bảng từ 2 cơ sở dữ liệu khác nhau
Sử dụng jdbc, chúng tôi có truy vấn sau.
Với chế độ ngủ đông, các truy vấn đối với cả hai cơ sở dữ liệu vẫn giống nhau.
4. Giảm thiểu thay đổi mã
Khi chúng tôi thay đổi (thêm) một cột vào bảng, chúng tôi cần thay đổi điều gì bằng cách sử dụng jdbc:
- Thêm thuộc tính vào lớp pojo.
- Thay đổi phương thức chứa truy vấn “select”, “insert”, “update” để thêm một cột mới. Có thể có nhiều phương thức và nhiều lớp chứa truy vấn trên. Để sử dụng hibernate, chúng ta chỉ cần:
- Thêm thuộc tính vào lớp pojo.
- Cập nhật tệp ánh xạ xml ở chế độ ngủ đông để thêm thuộc tính – cột ánh xạ. Chúng tôi chỉ sửa đổi 2 tệp trên.
5. Tải chậm
Đối với các ứng dụng java xử lý cơ sở dữ liệu lớn với hàng trăm triệu bản ghi, việc sử dụng tính năng tải chậm khi truy cập dữ liệu từ cơ sở dữ liệu có thể mang lại lợi ích lớn. Nó giống như có thể bẻ từng đôi đũa từ một bó lớn, thay vì bẻ cả bó. Ví dụ: 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 người dùng và bảng tài liệu có mối quan hệ một-nhiều. Trong trường hợp này, lớp Người dùng là lớp cha và lớp Tài liệu là lớp con. Theo thời gian, bàn tài liệu có thể nhanh chóng lấp đầy. Mỗi khi lấy thông tin người dùng và tài liệu tương ứng từ cơ sở dữ liệu, giả định rằng dữ liệu tài liệu đó rất lớn, để ứng dụng không bị chậm vì lưu toàn bộ tài liệu của toàn bộ người dùng chiếm nhiều bộ nhớ, chúng tôi áp dụng tải lười biếng cho mỗi người dùng như sau.
6. Xóa khối try-catch
Nếu xảy ra lỗi khi sử dụng cơ sở dữ liệu bằng jdbc, một sqlexception ngoại lệ sẽ được ném ra. Vì vậy, chúng ta phải sử dụng khối try-catch để xử lý ngoại lệ. hibernate giải quyết vấn đề này cho bạn bằng cách ghi đè toàn bộ ngoại lệ jdbc là bỏ chọn xeption , chúng tôi không cần viết try-catch trong mã của mình nữa.
7. Quản lý các giao dịch cam kết / hoàn trả
Một giao dịch là một nhiệm vụ cho một nhóm hoạt động (với cơ sở dữ liệu). Nếu một thao tác không thành công, toàn bộ tác vụ sẽ không thành công. Với jdbc, lập trình viên phải chủ động cam kết nếu toàn bộ hoạt động tác vụ thành công, hoặc phải quay lại để kết thúc tác vụ nếu có một hoạt động không thành công. Với hibernate, chúng ta không cần quan tâm đến các commit hay rollback, hibernate đã quản lý nó cho chúng ta.
8. bộ nhớ đệm ngủ đông
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 sử dụng chế độ ngủ đông, hãy xem hướng dẫn về chế độ ngủ đông cho người mới bắt đầu trên lcdung.top
Bài viết gốc trên lcdung.top
Có thể bạn quan tâm:
- 9 Thói quen Bạn Cần Thay đổi Để Làm giàu
- Tại sao lại sử dụng [serializefield] thay vì một biến công khai?
- Tại sao lại chọn r hoặc python khi bạn có thể chọn cả hai?
Xem thú vị hơn, nó hoạt động trên topdev