我使用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