java - NamedParameterJdbcTemplate 与 JdbcTemplate

标签 java spring jdbc spring-jdbc jdbctemplate

我是 Spring3.x 的初学者,我正在学习 Spring DAO 支持。 我想知道 NamedParameterJdbcTemplateJdbcTemplate 的区别。 就性能而言,哪一个是最好的。以及何时使用 NamedParameterJdbcTemplate 以及何时使用 JdbcTemplate

最佳答案

当你使用 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 代码不同的文件中,并且可能很容易意外地以错误的顺序获取参数。

关于java - NamedParameterJdbcTemplate 与 JdbcTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16359316/

相关文章:

java - POST 大消息时 HttpUrlConnection#setReadTimeout 无效

java - Spring 3如何以属性文件的间隔运行计划任务

java - 将 JVM 参数注入(inject)到 spring 属性文件中

java - 很少有 JDBC 连接

java - 在Win7上为SWT/RCP应用程序设置ApplicationId

java - 从 java 调用 HTPS WebService

spring - spring boot 2.x kebab-case 格式的问题

java - 组织.postgresql.util.PSQLException : ERROR: column "id" does not exist - Java Web Service

java - 在 SQL 数据库中存储时间戳

java - gRPC Java : How to know if a client disconnects abruptly (server side)?