2012-08-09 52 views
67

Tôi đang học Java EE và tôi đã tải nhật thực bằng thủy tinh cho giống nhau. Tôi đã xem một số ví dụ và cũng đọc các tài liệu Oracle để biết tất cả về Java EE 5. Kết nối với một cơ sở dữ liệu rất đơn giản. Tôi đã mở một dự án web động, tạo ra một phiên EJB, tôi đã sử dụng EntityManager và với các phương thức get có thể truy cập vào bảng dữ liệu được lưu trữ.JPA hoặc JDBC, chúng khác nhau như thế nào?

Đối với dự án tiếp theo của tôi, tôi đã tạo một lớp đơn giản và sau đó truy cập một số bảng DB. Vấn đề đầu tiên tôi gặp phải là thuộc tính PersistenceUnit sẽ chỉ được nhận ra bởi EJB, Servlet vv và không phải là một lớp java đơn giản. Vì vậy, sau đó tôi không thể sử dụng cách EntityManager (hoặc tôi có thể?)

Tôi đã được yêu cầu đi qua "JDBC" cách. Vấn đề đầu tiên tôi gặp phải là lấy kết nối tới DB. Có vẻ như tất cả điều này phải được mã hóa cứng. Tôi đã có một persistence.xml mà tôi có thể dễ dàng cấu hình kết nối cơ sở dữ liệu. Ngay cả việc thiết lập trình điều khiển cho DB cũng dễ dàng. Cũng không có các phương thức get/set trong JDBC để truy cập các thực thể bảng.

Làm cách nào để hiểu JPA và sự kiên trì liên quan đến JDBC? JPA đã nghĩ gì? Tại sao có các phương thức thiết lập/nhận? Ai đó có thể ném một số ánh sáng trên bản chất của hai và những ưu/khuyết điểm mà không có "thuật ngữ" là gì ?? Xin vui lòng cũng đề nghị một số liên kết. Một tìm kiếm google đơn giản cho JPA và JDBC khác biệt dẫn tôi đến một số trang web đầy đủ các "thuật ngữ" Tôi không thể làm theo :(

+2

Tại sao không bắt đầu với hướng dẫn JDBC: http://docs.oracle.com/javase/tutorial/jdbc/index.html –

+1

JPA có thể được sử dụng mà không cần EJB hoặc thậm chí Java EE, bạn có thể tạo EntityManagerFactory trực tiếp từ Persistence . – James

Trả lời

132

Điều khoản của Layman:

  • JDBC là một tiêu chuẩn cho cơ sở dữ liệu truy cập
  • JPA được một tiêu chuẩn cho ORM

JDBC là một tiêu chuẩn để kết nối với một DB trực tiếp và chạy SQL chống lại nó - ví dụ SELECT * FROM USERS, vv Datasets có thể được trả lại mà bạn có thể xử lý trong ứng dụng của bạn, và bạn có thể làm tất cả những thứ thông thường như INSERTS, DELETES, chạy các thủ tục lưu trữ, vv. Đây là một trong những công nghệ cơ bản đằng sau hầu hết truy cập cơ sở dữ liệu java (bao gồm các nhà cung cấp JPA).

Một trong những vấn đề với JDBC ứng dụng truyền thống là bạn thường có thể có một số mã crappy nơi nhiều ánh xạ giữa bộ dữ liệu và các đối tượng xảy ra, logic được trộn lẫn với SQL vv

JPA là một tiêu chuẩn cho đối tượng Bản đồ quan hệ. Đây là một công nghệ cho phép bạn ánh xạ giữa các đối tượng trong các bảng mã và cơ sở dữ liệu. Điều này có thể "ẩn" SQL khỏi nhà phát triển để tất cả chúng xử lý là các lớp java và nhà cung cấp cho phép bạn lưu chúng và tải chúng một cách kỳ diệu. Chủ yếu, các tệp ánh xạ XML hoặc chú thích trên getters, setters có thể được sử dụng để báo cho nhà cung cấp JPA biết các trường nào trên bản đồ đối tượng của bạn tới các trường nào trong DB. Các nhà cung cấp JPA nổi tiếng nhất là Hibernate, do đó, là một nơi tốt để bắt đầu cho các ví dụ cụ thể.

http://www.hibernate.org/

ví dụ khác bao gồm OpenJPA, TopLink, vv

Dưới mui xe, Hibernate và hầu hết các nhà cung cấp khác cho JPA viết SQL và sử dụng JDBC để đọc và ghi vào DB.

+2

iBatis (hiện nay MyBatis) không phải là triển khai JPA. Nếu bạn có một cái nhìn vào nó, bạn sẽ nhận thấy rằng nó có khái niệm rất khác nhau. –

+0

cảm ơn! Sai lầm của tôi, tôi nghĩ rằng nó thực hiện JPA, sửa chữa ngay bây giờ! –

+1

Không phải tất cả các nhà cung cấp JPA đều viết SQL và sử dụng JDBC ... vì chúng có thể tồn tại với một "loại kho dữ liệu khác" (MongoDB, Neo4j, v.v.). DataNucleus JPA là một ví dụ như – DataNucleus

31

khác biệt chính giữa JPA và JDBC là mức độ trừu tượng.

JDBC là mức thấp JPA cho phép bạn sử dụng một mô hình đối tượng trong ứng dụng của bạn có thể làm cho cuộc sống của bạn dễ dàng hơn nhiều. Một số nhiệm vụ không thể được giải quyết hiệu quả bằng cách sử dụng JPA, nhưng có thể được giải quyết hiệu quả hơn với JDBC

6

JDBC là tiền thân của JPA.

JDBC là cầu nối giữa thế giới Java và thế giới cơ sở dữ liệu. Trong JDBC, bạn cần trưng ra tất cả các chi tiết cần thiết cho các hoạt động CRUD, như tên bảng, tên cột, trong khi trong JPA (đang sử dụng JDBC bên dưới), bạn cũng chỉ rõ các chi tiết về siêu dữ liệu cơ sở dữ liệu đó.

Vì vậy, JPA tạo truy vấn cập nhật cho bạn và quản lý các thực thể mà bạn đã tra cứu hoặc tạo/cập nhật (nó cũng hoạt động tốt hơn).

Nếu bạn muốn thực hiện JPA mà không có vùng chứa Java EE, thì Spring và các thư viện của nó có thể được sử dụng với cùng một chú thích Java.

+0

"không có vùng chứa Java EE ??" Bạn có nghĩa là Spring và các thư viện của nó độc lập với web container không? –

+0

@BruceZu Tất nhiên rồi. Bạn có thể sử dụng nhiều thành phần khung công tác Spring mà không cần một thùng chứa web. Ví dụ, tiêm phụ thuộc không phải là thứ bạn chỉ cần trên ngữ cảnh web. – Dolfiz

12

JDBC là đặc điểm thấp hơn nhiều (và cũ hơn) so với JPA. Trong những điều cần thiết, JDBC là một API để tương tác với một cơ sở dữ liệu bằng cách sử dụng các truy vấn gửi SQL tinh khiết và truy xuất các kết quả. Nó không có khái niệm về các đối tượng hoặc cấu trúc phân cấp. Khi sử dụng JDBC, bạn có thể dịch tập kết quả (về cơ bản là ma trận hàng/cột của các giá trị từ một hoặc nhiều bảng cơ sở dữ liệu, được truy vấn SQL của bạn trả về) vào các đối tượng Java.

Bây giờ, để hiểu và sử dụng JDBC, điều quan trọng là bạn có một số hiểu biết và kiến ​​thức làm việc về SQL. Với điều đó cũng đi kèm một cái nhìn sâu sắc cần thiết vào một cơ sở dữ liệu quan hệ là gì, cách bạn làm việc với nó và các khái niệm như bảng, cột, khóa và mối quan hệ. Trừ khi bạn có ít nhất một sự hiểu biết cơ bản về cơ sở dữ liệu, SQL và mô hình hóa dữ liệu, bạn sẽ không thể sử dụng nhiều JDBC vì nó thực sự chỉ là một sự trừu tượng mỏng trên đầu những thứ này.

Các vấn đề liên quan