我是spring 框架的新手。我正在尝试使用与多个模式匹配的NamedParameterJdbcTemplate从 SQL Server 2005 数据库表中检索记录集(模式存储在 ArrayList 中)。
下面的代码检索匹配一组值的记录集:
List<String> valuesForBuildingPatterns1 = getValuesForBuildingPatterns1();
List<String> valuesForBuildingPatterns2 = getValuesForBuildingPatterns2();
String sqlQuery = "SELECT * FROM sqlServerTable col1 IN (:pattern1) AND col2 IN (:pattern2)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pattern1", valuesForBuildingPatterns1);
params.addValue("pattern2", valuesForBuildingPatterns2);
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());
问题:我不想搜索字符串值列表,而是要搜索正则表达式模式列表(如 %xyz%)。但我无法在 SQL 查询中同时使用“IN”子句和“LIKE”运算符,如下所示:
List<String> pattern1 = new ArrayList<String>();
List<String> pattern2 = new ArrayList<String>();
for(String str : valuesForBuildingPatterns1)
pattern1.add("%"+str+"%"); //If str="xyz", it adds "%xyz%" to the new list
for(String str : valuesForBuildingPatterns2)
pattern2.add("%"+str+"%");
String sqlQuery = "SELECT * FROM sqlServerTable col1 IN LIKE (:pattern1) AND col2 IN (:pattern2)";
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("pattern1", pattern1);
params.addValue("pattern2", pattern2);
resultset = namedParameterJdbcTemplate.query(sqlQuery, params, new MyRowMapper());
我还尝试循环遍历列表并使用“LIKE”运算符单独构建 SQL 查询,而不使用“IN”子句。但是 query() 方法不接受这一点。此外,我猜,像这样构建 SQL 查询胜过使用 NamedParameterJdbcTemplate 的主要目的。
for(String str1 : valuesForBuildingPatterns1)
for(String str2 : valuesForBuildingPatterns2)
{
String sqlQuery = "SELECT * FROM sqlServerTable col1 LIKE " + str1 + " AND col2 LIKE " + str2";
resultset.add(namedParameterJdbcTemplate.query(sqlQuery,null,new MyRowMapper()));
}
你能指导我解决这个问题吗?请告知是否需要更多信息,并请原谅我的无知,因为对框架了解不多。非常感谢。非常感谢您的帮助。
PS:该项目正在使用我工作的组织开发的内部工具进行开发。该工具基于 Spring 框架构建,因此支持 Spring 框架提供的所有服务。