Học viên: Hứa Lăng Mạnh Quang
Lớp: Java Fullstack 15
Email: mquangdw20@gmail.com
Số điện thoại: 0858422186
Nguồn tham khảo : https://www.baeldung.com/jpa-vs-jdbc

1 Tổng quan

Trong bài viết này chúng ta sẽ tìm hiểu sự khác biệt giữa Java Database Connectivity (JDBC) API và Java Persistence API (JPA)

2 JDBC là gì ?

JDBC là viết tắt của “Java Database Connectivity” - một giao diện lập trình ứng dụng (API) cho phép các ứng dụng Java tương tác với cơ sở dữ liệu. JDBC cung cấp các lớp và phương thức để kết nối và thao tác với cơ sở dữ liệu từ các ứng dụng Java, bao gồm truy vấn, cập nhật và thay đổi dữ liệu. Các trình điều khiển JDBC cho phép các ứng dụng Java tương tác với các loại cơ sở dữ liệu khác nhau, bao gồm MySQL, Oracle, Microsoft SQL Server, PostgreSQL và nhiều loại cơ sở dữ liệu khác nữa.

3 JPA là gì ?

JPA là viết tắt của “Java Persistence API” - một API của Java EE (Java Enterprise Edition) được sử dụng để lưu trữ và truy xuất dữ liệu từ cơ sở dữ liệu quan hệ. JPA cung cấp một cách tiếp cận đối tượng (object-oriented approach) cho việc lưu trữ và truy xuất dữ liệu trong Java, cho phép các đối tượng Java được ánh xạ vào các bảng trong cơ sở dữ liệu.

4 JDBC vs JPA

Khi đưa ra quyết định về cách tương tác với hệ thống cơ sở dữ liệu back-end, các kiến trúc sư phần mềm đối mặt với một thách thức công nghệ đáng kể. Cuộc tranh luận giữa JPA và JDBC thường là yếu tố quyết định, vì hai công nghệ cơ sở dữ liệu này có các phương pháp làm việc với dữ liệu lưu trữ khác nhau. Hãy phân tích những khác biệt chính giữa chúng

4.1 Tương tác với cơ sở dữ liệu ?

JDBC cho phép chúng ta viết các lệnh SQL để đọc dữ liệu từ cơ sở dữ liệu quan hệ và cập nhật dữ liệu vào đó. JPA, khác với JDBC, cho phép Deverlopers xây dựng các chương trình Java được hướng đối tượng và sử dụng cơ sở dữ liệu. Các chú thích JPA mô tả cách một lớp Java cụ thể và các biến của nó được ánh xạ vào một bảng và các cột trong cơ sở dữ liệu.

Hãy xem làm thế nào chúng ta có thể ánh xạ một lớp Nhân viên (Employee) vào bảng Nhân viên trong cơ sở dữ liệu:

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
   @Column(name = "employee_name")
   private String employeeName;
}

Framework JPA sau đó xử lý tất cả các mã phức tạp, dễ mắc lỗi để chuyển đổi giữa mã Java hướng đối tượng và cơ sở dữ liệu back-end.

4.2 Quản lý các mối quan hệ ?

Khi liên kết các bảng cơ sở dữ liệu trong một truy vấn với JDBC, chúng ta cần viết toàn bộ câu truy vấn SQL, trong khi với JPA, chúng ta chỉ cần sử dụng các chú thích để tạo các mối quan hệ One to One, One to Many, Many to One và Many to Many.

Hãy giả sử bảng Nhân viên (Employee) của chúng ta có một mối quan hệ một nhiều với bảng Liên lạc (Communication):

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
   @OneToMany(mappedBy = "employee", fetch = FetchType.EAGER)
   @OrderBy("firstName asc")
   private Set communications;
}

Chủ sở hữu của mối quan hệ này là Liên lạc (Communication), vì vậy chúng ta sử dụng thuộc tính mappedBy trong Nhân viên (Employee) để tạo một mối quan hệ hai chiều.

4.3 Phụ thuộc cở sở dữ liệu ?

Đối với JDBC, chúng ta cần phải viết các script khác nhau cho các cơ sở dữ liệu khác nhau, do đó JDBC phụ thuộc vào cơ sở dữ liệu. Trong khi đó, JPA là độc lập với cơ sở dữ liệu, có nghĩa là cùng một đoạn code có thể được sử dụng với nhiều cơ sở dữ liệu với ít (hoặc không có) sửa đổi.

4.4 Xử lí ngoại lệ ?

Vì JDBC sử dụng các exception kiểm tra lỗi, chẳng hạn như SQLException, do đó chúng ta phải viết nó trong khối try-catch. Trong khi đó, JPA sử dụng chỉ các exception không kiểm tra lỗi, giống như Hibernate. Do đó, chúng ta không cần phải bắt hoặc khai báo chúng ở mọi nơi sử dụng chúng.

4.5 Hiệu năng ?

Sự khác biệt hiệu năng giữa JPA và JDBC về cơ bản phụ thuộc vào nhu cầu sử dụng: framework JPA hay JDBC cho một hệ quản trị csdl cụ thể. Dù sao, chúng ta sẽ phải đối mặt với sự không phù hợp giữa đối tượng và quan hệ.

Để công bằng, khi chúng ta viết các truy vấn SQL không chính xác, hiệu suất của JDBC có thể rất chậm chạp. Khi quyết định giữa hai công nghệ này, hiệu suất không nên là điểm tranh cãi. Các nhà phát triển chuyên nghiệp có thể tạo ra các ứng dụng Java chạy tốt không kém bất kỳ công nghệ nào được sử dụng.

4.6 Phụ thuộc JDBC?

Ứng dụng dựa trên JPA vẫn sử dụng JDBC làm nền tảng. Do đó, khi chúng ta sử dụng JPA, mã của chúng ta thực sự đang sử dụng các API của JDBC cho tất cả các tương tác với cơ sở dữ liệu. Nói cách khác, JPA hoạt động như một lớp trừu tượng ẩn giấu các cuộc gọi JDBC cấp thấp khỏi nhà phát triển, làm cho lập trình cơ sở dữ liệu trở nên đáng kể dễ dàng hơn.

4.7 Quản lý Transaction?

Trong JDBC, quản lý transaction được xử lý rõ ràng bằng cách sử dụng commit và rollback. Trong khi đó, quản lý transaction được cung cấp một cách ngầm định trong JPA. Khi sử dụng JPA, nếu chúng ta thực hiện thay đổi đối với các đối tượng quản lý, JPA sẽ tự động quản lý việc commit và rollback cho các thay đổi đó. Việc quản lý transaction bởi JPA giúp đơn giản hóa quá trình lập trình và giảm thiểu lỗi trong việc quản lý transaction.

5. Ưu và Nhược điểm

Lợi ích rõ ràng nhất của JDBC so với JPA là nó đơn giản hơn để hiểu. Tuy nhiên, nếu một Deverloper không hiểu rõ về cách JPA hoạt động bên trong hoặc thiết kế cơ sở dữ liệu, họ sẽ không thể viết được mã tốt.

Ngoài ra, nhiều Deverloper cho rằng JPA phù hợp hơn cho các ứng dụng phức tạp hơn. Tuy nhiên, JDBC được coi là lựa chọn ưu tiên nếu một ứng dụng sử dụng một cơ sở dữ liệu đơn giản và chúng ta không dự định chuyển sang một nhà cung cấp cơ sở dữ liệu khác.

Lợi ích chính của JPA đối với các Deverloper là họ có thể viết mã Java của mình bằng các nguyên tắc và thực tiễn tốt nhất hướng đến đối tượng mà không cần phải lo lắng về các khía cạnh ngữ nghĩa cơ sở dữ liệu. Do đó, việc phát triển có thể được hoàn thành nhanh hơn, đặc biệt là khi các Deverloper phần mềm thiếu hiểu biết vững chắc về SQL và cơ sở dữ liệu quan hệ.

Ngoài ra, bởi vì một framework được kiểm tra và mạnh mẽ xử lý tương tác giữa cơ sở dữ liệu và ứng dụng Java, chúng ta nên thấy một giảm thiểu các lỗi từ lớp ánh xạ cơ sở dữ liệu khi sử dụng JPA.

6. Kết luận

Trong hướng dẫn này, chúng ta đã khám phá những khác biệt chính giữa JPA và JDBC.

Mặc dù JPA mang đến nhiều lợi ích, nhưng nếu JPA không phù hợp với yêu cầu hiện tại của ứng dụng của chúng ta, chúng ta vẫn có nhiều sự lựa chọn thay thế chất lượng cao khác để sử dụng.