2013-05-03 134 views
28

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

+3

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 đó. –

Trả lời

4

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.

53

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.

+0

Bất kỳ sự khác biệt nào khác ??? – Sarma

+3

@Sarma: đó không phải là một câu hỏi rất cụ thể. nếu bạn muốn biết thêm chi tiết, bạn có thể kiểm tra mã nguồn. –

+0

có thể sử dụng cả NamedParameterJdbcTemplate và JdbcTemplate với cùng một nguồn dữ liệu không? Họ sẽ can thiệp lẫn nhau? – MaxG