Java 如何在JdbcTemplate中使用带列表的IN()子句?
我正在尝试使用列表来匹配Java 如何在JdbcTemplate中使用带列表的IN()子句?,java,spring,spring-jdbc,Java,Spring,Spring Jdbc,我正在尝试使用列表来匹配JdbcTemplate: List foos = jdbcTemplate.query("select * from foo where name IN (?)", new Object[] { Arrays.asList("foo1", "foo2", "foo3")}, new FooMapper() ); 结果:数据库列不匹配,即使name列等于字符串foo1。为什么? 如果可能,使用不带命名参数的JdbcTemplate。设置名称=。。。;
JdbcTemplate
:
List foos = jdbcTemplate.query("select * from foo where name IN (?)",
new Object[] { Arrays.asList("foo1", "foo2", "foo3")},
new FooMapper()
);
结果:数据库列不匹配,即使name
列等于字符串foo1
。为什么?
如果可能,使用不带命名参数的JdbcTemplate
。设置名称=。。。;
Set<String> names = ...;
MapSqlParameterSource fooParams = new MapSqlParameterSource();
fooParams.addValue("names", names);
List<Foo> foo = getJdbcTemplate().query("SELECT * FROM foo WHERE name IN (:names)",
fooParams, getRowMapper());
MapSqlParameterSource fooParams=新的MapSqlParameterSource();
fooParams.addValue(“名称”,名称);
List foo=getJdbcTemplate().query(“从foo中选择*,其中名称位于(:names)”,
fooParams,getRowMapper());
是否有不必使用NamedParameterJdbcTemplate
和MapSqlParameterSource
的解决方案?是。列表名称=新的ArrayList()//添加映射名称Map=Collections.singletonMap(“名称”,名称);然后在查询params@membersoundSo中传递namesMap,但我仍然必须使用NamedParameterJdbcTemplate
?如果可能的话,我正在寻找直接使用JdbcTemplate
的解决方案。否。它只是将示例中的newobject[]{array.asList(“foo1”、“foo2”、“foo3”)},
替换为名称映射,即java映射代码>似乎无效。普通JdbcTemplate中没有可以接受这些参数的查询方法!