我使用Spring框架的jdbcTemplate从db获取记录列表。现在我想通过给查询附加一个约束来为其添加过滤。 例如。说列表代表者和表演 - 姓名,电子邮件和位置使用spring框架的jdbcTemplate进行复杂过滤
原始查询是
String sql = "SELECT name, email, location FROM persons WHERE status = ?";
取决于过滤器,限制将被追加到它
if(filters.containsKey("person_name")) {
sql += " AND name LIKE '%" + filters.get("person_name") + "%'";
}
//similarly
if(filters.containsKey("person_email")) {
....
}
//similarly
if(filters.containsKey("person_location")) {
....
}
因此查询将通过将它传递给jdbcTemplate对象的查询方法来创建并执行它
this.jdbcTemplate.query(sql, new Object[] { 1 }, RowMapper<Person> rowmapper)
我担心的是,通过使用上述方法,它容易被注入,因为应用过滤器的值直接写入查询而没有任何转义。
是否有可能动态创建第二个参数(参数数组),就像构建查询一样?
是否有使用jdbcTemplate的替代方法?
编辑: 我现在用的StringEscapeUtils.escapeSql从org.apache.commons.lang.StringEscapeUtils逃脱值。但仍然在寻找更好的方法或春季已经提供的方法。
谢谢
我想到了这一点。但是如何动态创建对象数组('new object [] {..}')? – naiquevin 2011-03-01 06:56:35
查看我的更新回答 – 2011-03-01 07:26:28
应该算出来:) ..谢谢一吨 – naiquevin 2011-03-06 08:08:44