Tôi là người mới bắt đầu đến Spring3.x, tôi đang học hỗ trợ Spring DAO. Tôi muốn biết sự khác biệt giữa NamedParameterJdbcTemplate và JdbcTemplate. Điều nào là tốt nhất bằng phương tiện hiệu suất. Và khi đi cho NamedParameterJdbcTemplate và khi nào đi cho JdbcTemplate. Câu trả lời của bạn sẽ giúp ích rất nhiều cho những người mới bắt đầu như tôi.NamedParameterJdbcTemplate vs JdbcTemplate
Trả lời
Không có hiệu suất khác biệt có thể đo lường. NamedParameterJdbcTemplate là một tiện ích cho phép bạn sử dụng các tham số có tên. Nếu bạn thực sự tò mò hãy xem mã nguồn có sẵn để tải xuống. Tôi thấy rằng việc đọc mã nguồn giúp tôi tự tin hơn trong các câu trả lời tôi nhận được trên các diễn đàn.
Khi bạn sử dụng JdbcTemplate bạn cung cấp cho nó SQL có một giữ chỗ ?
cho mỗi tham số bạn muốn thay thế vào SQL. Khi bạn gán các thông số trong các mã, bạn phải vượt qua trong đối số trong một mảng và họ quen theo thứ tự mà chúng xuất hiện trong mảng, như thế này:
Object[] args = new Object[] {"x", "y"};
String sql = "select * from foo where a = ? and b = ?";
jdbcTemplate.query(sql, args, resultSetExtractor);
nên SQL mà được chạy là select * from foo where a = 'x' and b = 'y'
.
NamedParameterJdbcTemplate cho phép bạn chỉ định tên cho trình giữ chỗ thông số và chuyển vào bản đồ để mẫu có thể khớp với tên bản đồ cho trình giữ chỗ. Vì vậy, mã của bạn sẽ trông giống như:
String sql = "select * from foo where a = :mya and b = :myb";
Map<String, Object> argMap = new HashMap<String, Object>();
argMap.put("mya", "x");
argMap.put("myb", "y");
namedParameterJdbcTemplate.query(sql, argMap, resultSetExtractor);
tạo cùng một SQL làm ví dụ đầu tiên (và chạy truy vấn là phần tốn thời gian, hiệu suất chèn đối số không phải là vấn đề.).
Ý tưởng là kết hợp các đối số theo tên ít dễ xảy ra lỗi hơn là phải chỉ định chúng theo thứ tự cụ thể. Trong một ứng dụng thực tế thường SQL được lưu trữ trong một tập tin riêng biệt từ mã DAO, và nó có thể dễ dàng vô tình nhận được các thông số theo thứ tự sai.
- 1. JPA vs Spring JdbcTemplate
- 2. sử dụng Spring JdbcTemplate - tiêm nguồn dữ liệu vs JdbcTemplate
- 3. Spring JdbcTemplate/NamedParameterJdbcTemplate truyền giá trị rỗng như một giá trị tham số
- 4. JdbcTemplate IN Khoản cho các phần tử chuỗi
- 5. JdbcTemplate và SimpleJdbcTemplate
- 6. Spring JDBCTemplate Bảng Locking với MySQL
- 7. nhận DateTime từ ResultSet trong JdbcTemplate
- 8. JdbcTemplate và Giao dịch của Spring
- 9. spring jdbcTemplate cách bắt ngoại lệ?
- 10. nhận dạng từ chèn sql qua jdbctemplate
- 11. Lập tức một JdbcTemplate từ một java.sql.Connection
- 12. JdbcTemplate thiết POJO lồng nhau với BeanPropertyRowMapper
- 13. Nhiều phiên bản JdbcTemplate hay không?
- 14. JdbcTemplate: truy cập trường MySQL VARBINARY dưới dạng Chuỗi
- 15. Cách sử dụng danh sách chuỗi trong NamedParameterJDBCTemplate để nhận kết quả
- 16. Spring JdbcTemplate: cách giới hạn các hàng đã chọn?
- 17. Chèn nhiều hàng bằng cách sử dụng JdbcTemplate
- 18. Spring JdbcTemplate không thể lấy ID chèn từ MySQL
- 19. J2ME VS Android VS iPhone VS Symbian VS Windows CE
- 20. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 21. bigtable vs cassandra vs simpledb vs dynamo vs couchdb vs hypertable vs riak vs hbase, họ có điểm gì chung?
- 22. ACE vs Boost vs Poco vs wxWidgets
- 23. NetSqlAzMan vs AzMan vs (?????)
- 24. & vs * và | vs +
- 25. Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc
- 26. Làm thế nào để lập trình sử dụng JdbcTemplate của Spring?
- 27. Làm thế nào chính xác JdbcTemplate với TransactionManager làm việc cùng nhau?
- 28. Làm cách nào để hủy truy vấn chạy dài bằng Spring và JDBCTemplate?
- 29. Làm thế nào để tái sử dụng cùng một kết nối với JdbcTemplate của Spring?
- 30. Làm cách nào để tạo danh sách sql "in (...)" động thông qua Spring JdbcTemplate?
Tại sao bạn không đọc javadoc? Bạn không nghĩ rằng nó có thể giải thích sự khác biệt là gì? Khi nói đến hiệu suất, cách truy vấn được tạo và thực thi không quan trọng lắm. Điều quan trọng là chính truy vấn đó. –