2014-10-18 13 views
6

Tôi đang xây dựng một dịch vụ web bằng cách sử dụng khung công tác Dropwizard (phiên bản 0.7.0). Nó liên quan đến việc thực hiện một số truy vấn chỉ đọc vào cơ sở dữ liệu, thao tác tập hợp kết quả và sau đó trả về tập dữ liệu đó. Tôi đang sử dụng MySQL như một công cụ cơ sở dữ liệu. Kể từ khi tôi mới vào khuôn khổ này, tôi muốn biết tùy chọn nào tôi nên chọn: Hibernate hoặc JDBI.Hibernate vs JDBI

Trả lời

9

Tôi đã sử dụng cả hai loại này. Tôi đã sử dụng Hibernate với GORM trong Grails cũng như trong một ứng dụng Spring truyền thống và tôi đã sử dụng JDBI trong Dropwizard.

Tôi thực sự rất thích sự đơn giản của JDBI và đây là một vài lý do tại sao tôi thích nó hơn Hibernate.

  1. Tôi biết chính xác SQL nào sẽ được thực hiện để lấy dữ liệu tôi đang yêu cầu. Với Hibernate, đôi khi bạn có thể phải làm rất nhiều rắc rối xung quanh với HQL và cấu hình các đối tượng của bạn với những gì bạn định quay trở lại. Cuối cùng, bạn sẽ sử dụng SQL, nhưng sau đó khó có thể ánh xạ chính xác kết quả của bạn trở lại đối tượng miền của bạn, hoặc bạn từ bỏ và cho phép hibernate để tìm chúng từng cái một.

  2. Tôi không cần phải lo lắng về việc tìm nạp lười biếng/háo hức và điều đó sẽ ảnh hưởng đến thời gian truy vấn của tôi trên các tập dữ liệu lớn như thế nào.

  3. Các ánh xạ không phức tạp vì bạn tự quản lý chúng và bạn không phải dựa vào việc kết hợp các chú thích và tối ưu hóa phù hợp.

Trường hợp của bạn có vẻ như bạn muốn thứ gì đó nhẹ vì bạn không có nhiều trường hợp sử dụng và chắc chắn là JDBI trên Hibernate theo ý kiến ​​của tôi.

2

nếu bạn có rất ít công việc trên cơ sở dữ liệu, sau đó sử dụng JDBI khác đi cho Hibernate vì nó là rất mạnh và cung cấp nhiều tính năng bổ sung cho logic kiên trì của bạn.

4

Thực sự, cả hai giải pháp này chỉ là "khóa".

Nếu bạn muốn sử dụng giao diện kiểu mô hình, hãy viết mã của bạn dựa vào JPA (nếu bạn chắc chắn nó sẽ quay lại cơ sở dữ liệu quan hệ) hoặc JDO (nếu bạn muốn quay lại quan hệ và khác) loại cơ sở dữ liệu, như chuyển động không có SQL). Điều này là do với một trong các giải pháp này, khi sự cố xảy ra, bạn có thể chuyển đổi nhà cung cấp kiên trì mà không cần viết lại phần lớn mã của bạn.

Nếu bạn muốn đi với mô hình kiên trì theo thủ tục (xử lý các truy vấn SQL trực tiếp và như vậy), thì hãy đi với JDBi hoặc thậm chí là JDBC. JDBi cung cấp một trừu tượng rất tốt đẹp hơn JDBC; tuy nhiên, có những trường hợp bạn muốn truy cập cấp thấp hơn (vì lý do hiệu suất, của loại này là bạn đang điều chỉnh các truy vấn và cơ sở dữ liệu trong buổi hòa nhạc). Một lần nữa JDBC là một tiêu chuẩn sao cho bạn có thể trao đổi một cơ sở dữ liệu cho một cơ sở dữ liệu khác một cách dễ dàng; tuy nhiên, bản thân SQL sẽ không dễ dàng hoán đổi.

Sửa đổi phân vùng swap của SQL ra vấn đề, tôi khuyên bạn nên sử dụng bộ file tài sản để tổ chức các truy vấn, và sau đó một Resource loại loader mechanisim để ràng buộc các SQL cho cơ sở dữ liệu quyền mã. Nó không phải là 100% dễ dàng; nhưng nó giúp bạn tiến xa hơn một chút.

Bây giờ, nếu bạn hỏi tôi những gì tôi sẽ sử dụng, tôi khuyên bạn nên dùng JDO.

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