我是Spring3.x的初学者,我正在学习Spring DAO的支持。 我想知道NamedParameterJdbcTemplate和JdbcTemplate之间的区别。 通过表现哪一个是最好的。什么时候去NamedParameterJdbcTemplate 什么时候去JdbcTemplate。你的答案对我这样的初学者有很大的帮助。
答案 0 :(得分:60)
当您使用JdbcTemplate时,为它提供一个SQL,它为您要替换为SQL的每个参数都有一个?
占位符。在代码中分配参数时,您必须在数组中传递参数,并按照它们在数组中出现的顺序使用它们,如下所示:
Object[] args = new Object[] {"x", "y"};
String sql = "select * from foo where a = ? and b = ?";
jdbcTemplate.query(sql, args, resultSetExtractor);
所以运行的SQL是select * from foo where a = 'x' and b = 'y'
。
NamedParameterJdbcTemplate允许您为参数占位符指定名称并传入地图,以便模板可以将地图名称与占位符相匹配。所以你的代码看起来像是:
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);
生成与第一个示例相同的SQL(并且运行查询是时间密集型部分,参数插入的性能不是问题。)。
这个想法是,按名称匹配参数比不必按特定顺序指定它们更不容易出错。在实际应用程序中,SQL通常存储在与DAO代码不同的文件中,并且可能很容易意外地以错误的顺序获取参数。
答案 1 :(得分:4)
没有可衡量的差异表现。 NamedParameterJdbcTemplate是一种便利,允许您使用命名参数。 如果您真的很好奇,请查看可供下载的源代码。 我发现阅读源代码让我对论坛上的答案更有信心。