Câu hỏi đơn giản: cách hiệu quả hơn để truy cập vào một db trong Java/JDBC là gì? Tôi là người phát triển web và tôi muốn viết một số mã có thể tái sử dụng và có thể mở rộng.
Điều gì là thú vị đối với tôi là việc sử dụng các công cụ như ResultSupport: nó có quá rộng về mặt sử dụng tài nguyên không?
Bạn có thể đề xuất điều gì?Chiến lược hiệu quả Java để truy cập DB
Trả lời
Không chỉ JDBC cụ thể, chỉ nói chung thứ SQL
Nếu bạn phải chạy lại một truy vấn nhiều lần, sử dụng PreparedStatement. Sử dụng thủ tục lưu sẵn nếu nó có sẵn. Điều này rõ ràng là không di động để YMMV.
Luôn đóng ResultSet hoặc Statement nếu bạn không sử dụng nó. Việc đóng một bản Tuyên Bố sẽ tự động đóng tất cả ResultSet được liên kết với Bản Tuyên Bố. Tuy nhiên nó là một thói quen tốt để đóng ResultSet.
Cố gắng hạn chế những gì có thể được truy vấn ví dụ: chọn * từ các đơn hàng trong đó order_date giữa XXX và yyy. Trong MySQL, truy vấn có thể là quét toàn bộ bảng hoặc 'phạm vi' tùy thuộc vào lượng dữ liệu được trả về. Vì vậy, hãy quyết định cách 'linh hoạt' bạn muốn truy vấn của mình là
Nếu bạn đang sử dụng MySQL, hãy sử dụng giải thích để tối ưu hóa truy vấn của bạn. Nếu bạn đang sử dụng JPA, thì bạn sẽ không thấy SQL được tạo ra. (Đây không phải là đúng JDBC) Bạn có thể muốn bật ghi nhật ký trên trình quản lý ORM để hiển thị câu lệnh SQL được sử dụng. Sau đó sử dụng giải thích để tối ưu hóa điều đó.Bạn có thể muốn sử dụng @NamedNativeQuery nếu ORM tạo truy vấn thực sự phức tạp
Nếu trình điều khiển JDBC của bạn hỗ trợ cập nhật hàng loạt thì hãy sử dụng. Cập nhật hàng loạt được hỗ trợ trong PreparedStatement và ResultSet.
Bạn cũng có thể kiểm soát cam kết. Tốt nên tắt nó đi nếu bạn đang thực hiện rất nhiều cập nhật. Cuộc gọi cam kết() chính bạn.
Tôi nghĩ cách dễ nhất và phổ biến nhất là sử dụng Spring và JDBCTemplate của chúng.
Cách tiếp cận tốt nhất có thể phụ thuộc vào chồng bạn đang sử dụng để tạo ứng dụng web của bạn. Nếu bạn bắt đầu làm mới thì Spring là một cách tốt để đi.
Điều rất quan trọng là sử dụng luôn hồ bơi kết nối DataSource chẳng hạn như c3p0.
Có một dự án ánh xạ các đối tượng java vào cơ sở dữ liệu mysql. Azirt.
Sử dụng kết nối tổng hợp (hoặc một từ container của bạn hoặc một hồ bơi kết nối độc lập như c3p0 hoặc DBCP) và một cái gì đó giống như DBUtils hoặc của mùa xuân JdbcTemplate.
Câu trả lời hay nhất cho câu hỏi đơn giản này là: "nó phụ thuộc".
Có nhiều API bạn có thể sử dụng để truy cập cơ sở dữ liệu. Gần như tất cả chúng sẽ sử dụng API JDBC làm phương tiện của chúng để giao tiếp với cơ sở dữ liệu. Vì vậy, về mặt lý thuyết, không có gì có thể đánh bại JDBC cấp thấp thô (giống như mã máy là lý thuyết luôn nhanh hơn các ngôn ngữ lập trình cao cấp).
Nhưng khi bạn cũng muốn viết mã có thể tái sử dụng, tôi khuyên bạn nên xem xét JPA. Đó là các tiêu chuẩn Java cho sự kiên trì đối tượng đối với cơ sở dữ liệu quan hệ. Hiệu suất của nó khá tốt và rất linh động.
Vì JPA chỉ là một đặc điểm kỹ thuật, bạn có thể chọn bạn đang thực hiện riêng: Hibernate, OpenJPA hoặc bất kỳ máy chủ Java EE tuân thủ nào.
- 1. Chiến lược song song hiệu quả
- 2. property Chiến lược truy cập trong nhibernate
- 3. chiến lược hiệu quả hơn mà() hoặc trận()
- 4. Chiến lược hiệu quả để thoát khỏi lịch sử kiểm tra/thay đổi lịch sử cho các ứng dụng DB?
- 5. Chiến lược hiệu quả để nghiên cứu khung/thư viện một phần
- 6. Chiến lược xử lý các bảng db lớn
- 7. Chiến lược triển khai hashCode
- 8. Chiến lược để truy xuất người dùng hiện tại
- 9. Chiến lược Caching cho dữ liệu truy vấn
- 10. Chiến lược phiên bản CouchDB
- 11. chiến lược xóa RESTful
- 12. Người gửi email bằng Java sử dụng Mẫu chiến lược
- 13. Java Deflater chiến lược - DEFAULT_STRATEGY, FILTERED và HUFFMAN_ONLY
- 14. Chiến lược cho nhiều DAO trong Spring Java
- 15. chiến lược cập nhật tốt nhất trên hibernate stalestateException
- 16. Đánh giá chiến lược
- 17. Lược đồ thẻ nào hiệu quả nhất?
- 18. Chiến lược xác thực JPA
- 19. rối Layout chiến lược
- 20. sự khác biệt giữa mô hình khách truy cập và chiến lược là gì?
- 21. Chiến lược cho desugaring Haskell
- 22. Chiến lược tìm Heisenbugs
- 23. Lược đồ DB của điều khiển truy cập dựa trên vai trò
- 24. Chiến lược sao chép PostgreSQL
- 25. Truy vấn/lược đồ SQL hiệu quả cho Ban lãnh đạo
- 26. Bộ nhớ cache hiệu quả và BLOB - lần truy cập bộ nhớ cache lược tả/bỏ lỡ
- 27. Bắt đầu chiến lược vị trí
- 28. Các chiến lược để tránh Hibernate LazyInitializationExceptions
- 29. chiến lược sharding cơ sở dữ liệu
- 30. Java foreach hiệu quả
Và đối với khả năng mở rộng, hãy sử dụng 'DataSource' được gộp lại tra cứu từ JNDI. – gustafc