Written By : Nguyễn Mạnh Cường
Email liên hệ: ngmanhcuong2001@gmail.com
Nguồn bài viết gốc : https://www.baeldung.com/jpa-vs-jdbc

1. Khái quát chung

Trong hướng dẫn này, chúng ta sẽ xem xét sự khác biệt giữa API Java Database Connectivity (JDBC) và API Java Persistence (JPA).

2. JDBC là gì

JDBC là một giao diện cấp độ lập trình cho các ứng dụng Java giao tiếp với cơ sở dữ liệu. Một ứng dụng sử dụng API này để giao tiếp với trình quản lý JDBC. Đó là API phổ biến mà mã ứng dụng của chúng tôi sử dụng để giao tiếp với cơ sở dữ liệu. Ngoài API là trình điều khiển tương thích JDBC do nhà cung cấp cung cấp cho cơ sở dữ liệu mà chúng tôi đang sử dụng.

3. JPA là gì

JPA là một tiêu chuẩn Java cho phép chúng ta liên kết các đối tượng Java với các bản ghi trong cơ sở dữ liệu quan hệ. Đó là một cách tiếp cận khả thi đối với Ánh xạ mối quan hệ đối tượng (ORM) , cho phép nhà phát triển truy xuất, lưu trữ, cập nhật và xóa dữ liệu trong cơ sở dữ liệu quan hệ bằng cách sử dụng các đối tượng Java. Một số triển khai có sẵn cho đặc tả JPA.

4. JPA và JDBC

Khi phải quyết định làm thế nào để giao tiếp với các hệ thống cơ sở dữ liệu back-end, các kiến trúc sư phần mềm phải đố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 có những cách tiếp cận rất khác nhau để làm việc với dữ liệu liên tục. Hãy phân tích sự khác biệt chính giữa chúng.

4.1. Tương tác cơ sở dữ liệu

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

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

Sau đó, khung JPA xử lý tất cả các mã hóa dễ xảy ra lỗi, tốn thời gian cần thiết để chuyển đổi giữa mã Java hướng đối tượng và cơ sở dữ liệu phía sau .

4.2. Quản lý Hiệp hội

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 ra toàn bộ 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 một-một, một-nhiều, nhiều-một và nhiều -đến nhiều hiệp hội .
Giả sử bảng nhân viên của chúng tôi có mối quan hệ một-nhiều với bảng giao tiếp :

@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à Communication , vì vậy chúng tôi đang sử dụng thuộc tính mappedBy trong Employee để biến nó thành mối quan hệ hai chiều.

4.3. Sự phụ thuộc vào cơ sở dữ liệu

JDBC phụ thuộc vào cơ sở dữ liệu, có nghĩa là các tập lệnh khác nhau phải được viết cho các cơ sở dữ liệu khác nhau . Mặt khác, JPA là cơ sở dữ liệu bất khả thi, có nghĩa là cùng một mã có thể được sử dụng trong nhiều loại cơ sở dữ liệu với một vài (hoặc không) sửa đổi .

4.4. Xử lý ngoại lệ

Vì JDBC ném các ngoại lệ đã kiểm tra, chẳng hạn như SQLException, chúng ta phải viết nó trong một khối try-catch . Mặt khác, khung JPA chỉ sử dụng các ngoại lệ không được kiểm tra, 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 chúng ta đang sử dụng chúng.

4.5. Màn biểu diễn

Sự khác biệt giữa JPA và JDBC về cơ bản là ai thực hiện mã hóa: khung JPA hoặc một nhà phát triển địa phương. Dù bằng cách nào, chúng ta sẽ phải đối mặt với sự không phù hợp trở kháng quan hệ đối tượng .

Công bằng mà nói, 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ệ, hiệu suất không phải là một điểm tranh chấp. Các nhà phát triển chuyên nghiệp có nhiều khả năng tạo ra các ứng dụng Java chạy tốt như nhau bất kể công nghệ được sử dụng.

4.6. Sự phụ thuộc của JDBC

Các ứng dụng dựa trên JPA vẫn sử dụng JDBC. Do đó, khi chúng tôi sử dụng JPA, mã của chúng tôi thực sự đang sử dụng các API 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 đóng vai trò như một lớp trừu tượng che giấu các lệnh gọi JDBC cấp thấp từ nhà phát triển, làm cho việc lập trình cơ sở dữ liệu dễ dàng hơn đáng kể .

4.7. Quản lý giao dịch

Trong JDBC, quản lý giao dịch được xử lý rõ ràng bằng cách sử dụng cam kết và khôi phục. Mặt khác, quản lý giao dịch được cung cấp ngầm trong JPA .

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

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

Ngoài ra, JPA được nhiều nhà phát triển cho là phù hợp hơn với các ứng dụng phức tạp hơn . Tuy nhiên, JDBC được coi là giải pháp thay thế phù hợp hơn nếu một ứng dụng sẽ sử dụng một cơ sở dữ liệu đơn giản và chúng tôi không có kế hoạch di chuyển nó sang một nhà cung cấp cơ sở dữ liệu khác .

Ưu điểm chính của JPA so với JDBC đối với các nhà phát triển là họ có thể viết mã các ứng dụng Java của mình bằng cách sử dụng các nguyên tắc hướng đối tượng và các phương pháp hay nhất mà không phải lo lắng về ngữ nghĩa cơ sở dữ liệu. Do đó, quá trình phát triển có thể được hoàn thành nhanh chóng hơn, đặc biệt khi các nhà phát triển 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 khung công tác mạnh mẽ và được kiểm tra tốt đang xử lý tương tác giữa cơ sở dữ liệu và ứng dụng Java, chúng ta sẽ thấy sự giảm thiểu 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 nhanh này, chúng tôi đã khám phá những điểm khác biệt chính giữa JPA và JDBC.

Trong khi JPA mang lại nhiều lợi thế, chúng tôi có nhiều lựa chọn thay thế chất lượng cao khác để sử dụng nếu JPA không hoạt động tốt nhất cho các yêu cầu ứng dụng hiện tại của chúng tôi.