首页 > 解决方案 > 如何使用 JDBCTemplate 和 MapParameterSource 创建动态 SELECT 子句?

问题描述

我们在 Spring 中的非 JPA 存储库有(并且将会有)很多类似的样板代码。为了最大限度地减少可能的人为错误并减少令人麻木的工作,我们想编写一些实用程序类。为此,我需要能够将列插入到 select 语句中。

我能做什么:

final String sql = "SELECT " + myDynamicColumn + " FROM ....."

这行得通。但是,我们正在使用 jdbcTemplate 和 MapSqlParameterSource,因此,我想做的事情是:

final String sql = "SELECT :myColumn FROM ...";
sqlParams.add("myColumn","realColumnName");
...

然而,这不起作用,因为在执行过程中,任何参数都会被放入单引号中,这不是有效的 SQL。这使代码不透明,因为它迫使我混合两种样式。

有没有办法“告诉” MapSqlParameterSource 该特定元素需要按原样插入,而不对其进行格式化?

标签: javasqlspringspring-datajdbctemplate

解决方案


推荐阅读