如何使用 NamedParameterJDBCTemplate 中的字符串列表来获取结果
Posted
技术标签:
【中文标题】如何使用 NamedParameterJDBCTemplate 中的字符串列表来获取结果【英文标题】:How to use a list of string in NamedParameterJDBCTemplate to get results 【发布时间】:2013-01-04 04:49:02 【问题描述】:使用 Spring-JDBC 进行实验。我使用this 作为参考。我正在尝试获取具有相同姓氏的演员列表。运行这段代码给了我想要的结果:
public List<String> getActorsWithSameLastName(String lastName,
NamedParameterJdbcTemplate template)
String query = "SELECT FIRSTNAME FROM ACTORS WHERE LASTNAME=:LASTNAME";
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("LASTNAME", lastName);
return template.queryForList(query, paramMap, String.class);
我有一个姓氏List<String>
。如何使用我拥有的列表获取演员列表?我是遍历姓氏列表并每次都调用getActorsWithSameLastName()
,还是spring提供了一种迭代并为我获取结果的方法?请指教。
【问题讨论】:
【参考方案1】:你也可以使用MapSqlParameterSource
String query = "SELECT FIRSTNAME FROM ACTORS WHERE LASTNAME in (:LASTNAME)";
Set<String> ids = ....;
MapSqlParameterSource parameters = new MapSqlParameterSource();
parameters.addValue("LASTNAME", ids);
this.namedparameterJdbcTemplate.query(query, parameters);
【讨论】:
谢谢,这适用于我有一组多个字符串对象的情况 @Jayamohanquery.toString()
,当它已经是字符串格式时需要什么
我认为不需要
我已经删除了
这应该是公认的答案。这是一种更好的方法。【参考方案2】:
使用 IN 子句..
How to use SELECT IN clause in JDBCTemplates?
List<String> lastnames= new ArrayList<>();
Map namedParameters = Collections.singletonMap("lastnamevalues", lastnames);
StringBuffer recordQueryString = new StringBuffer();
recordQueryString.append("select FIRSTNAME, LASTNAME from ACTORS where lastname in (:lastnamevalues)");
List nameInvolvements = this.namedparameterJdbcTemplate.query(recordQueryString.toString(), namedParameters, new MyMapper());
【讨论】:
以上是关于如何使用 NamedParameterJDBCTemplate 中的字符串列表来获取结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]
如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?