Скажем, у меня есть SQL-запрос, где я хочу сортировать по разным столбцам.Однако я хочу сделать это отдельно.
Например, когда пользователь хочет отсортировать только по firstName, я хочу запустить
Select .... from table order by firstName
, когда пользователь хочет отсортировать только по lastName, я хочу запустить
Select .... from table order by lastName
и так далее.У меня есть около 100 columns
, и я не хочу создавать 100 sql files
и передавать строки в метод queryForList
из jdbcTemplate
.Так есть ли эффективный способ сделать это?Если у меня есть перечисление для всех 100 столбцов, которые точно соответствуют имени реального столбца в базе данных, могу ли я каким-то образом передать эту строку как элемент, по которому я хочу упорядочить?
Я попытался использовать namedParameterJdbcTemplate, выполнивчто-то вроде
Select .... from table order by :query
, и в своем Java-коде я сделал
// njdbc stands for namedParameterJdbcTemplate
MapSqlParameterSource params = new MapSqlParameterSource();
params.addValue("query","firstName");
njdbc.queryForList(sql, params);
Но это дает мне ошибку привязки, так как я не привязываюсь к значению, а к реальному синтаксису sql.
Еще один способ, который я задумал сделать, - это на самом деле использовать простые операции Java String (например, метод replace), чтобы заменить :query
на имя моего столбца (например, firstName).Однако это неправильный способ сделать это, так как это склонно к SQL-инъекциям.
Примечание. Для краткости удален большой синтаксис sql.Я также использую sql-сервер на случай, если это поможет.Однако я думаю, что решение для этого было бы независимым от базы данных.