2015-10-23 5 views
1

Как новичок в программировании сервлета, я думаю, что я, возможно, не получил что-то здесь: я понимаю концепцию Java Beans и небольшие вспомогательные классы ORM, такие как org.apache.commons.dbutils.DbUtils. Я могу преобразовать ResultSet в экземпляр моего объекта JavaBean с ResultSetHandler и BeanHandler. Но нет ли удобного способа сделать это наоборот, кроме жесткого кодирования строки SQL? Что-то вродеМожет ли apache-commons-dbutils скрывать beans в SQL-заявление?

QueryRunner run = new QueryRunner(datasource); 
int result = run.update("UPDATE " + tableName + " SET " + [and now some Handler sets all the columns from the JavaBean]); 

По крайней мере, я не нашел ничего подобного! Или я ошибаюсь? Помогите оценить.

ответ

1

Вы не ошибетесь, вам все равно понадобится жестко закодированная строка SQL, как показано в this answer. Sql2o также требует жестко закодированную строку SQL, но это позволит вам связать POJO, который получает вас на полпути, см. here (внизу страницы).

Я думаю, вам всегда понадобится жестко закодированная строка SQL некоторой формы, потому что это JDBC-вспомогательные библиотеки, а не «объектные реляционные карты». Перед вставкой не известно, какие свойства автоматически генерируются, имеют значение по умолчанию, являются внешними ключами, допускают нулевые значения и т. Д. Вся эта информация необходима для подготовки правильной инструкции вставки на основе POJO/JavaBean, и это выходит за рамки вспомогательных библиотек. На стороне плюса: указание строки SQL является явным (нет волшебства за кулисами) и держит вас в полном соответствии.

+0

спасибо! Я просто подумал, что если «columnname = parametername» для класса POJO работает в одном классе с классом «ResultSetHandler», для него не должно быть слишком сложно иметь одно и то же для другого пути ... это просто не «сексуальность» ", чтобы жестко записать его ... но потом вы упомянули все возможности SQL, о которых нужно было бы подумать ... ну давайте сделаем это жестко) – cirko

+0

Кстати, привязка модели хорошая, это сделает ее для моего уровня мастерства! – cirko