Стратегия для сопоставления результатов SQL с объектами Java - PullRequest
4 голосов
/ 23 июля 2011

Я использую JDBC (и jdbcTemplate Spring-jdbc) для доступа к моей базе данных в веб-приложении java.У меня много разных запросов, некоторые, где я присоединяюсь к таблице, один с подзапросом, один с использованием группы здесь и т. Д. И т. Д.

Часто мне нужен результат только для отображения конкретной таблицыэто генерируется JSP, так что я могу просто использовать удобный метод queryForList, который возвращает List<Map<String, Object>>, List, где каждая строка представлена ​​картой, отображающей имена столбцов в значения.В JSP это нормально, в любом случае нет проверки типа времени компиляции, нет завершения кода для свойств по eclipse и т. Д.

Но иногда у меня есть Java-код для обработки результата запроса, и я думаю, что было бы полезноне работает с картами, но с реальными объектами, в основном для проверки во время компиляции того, действительно ли свойства существуют, имеют правильный тип и, конечно, для завершения кода.

Но если я хочу, мне нужно написатьОбъект для каждого отдельного запроса, который может быть множеством объектов (страниц кода, в которых нет ничего, кроме сеттеров и геттеров).

Как лучше всего справиться с такой ситуацией?Просто написать эти проклятые объекты?Или есть лучший способ?

Ответы [ 2 ]

3 голосов
/ 23 июля 2011

... было бы полезно не работать с картами, но с реальными объектами, в основном для проверки времени компиляции, действительно ли свойства существуют, имеют правильный тип и, конечно, иметь завершение кода.

Вы хотите, чтобы компилятор понимал вашу объектную модель, так что (по крайней мере, в Java) вам нужно будет создать ее, я боюсь.

Достойная IDE предоставит опциигенерировать методы get / set для вас из переменных членов, которые могут сэкономить время.Если объектная модель существует исключительно для применения некоторой семантики к запросам JDBC, а не бизнес-логики, возможно, подходят открытые члены, избегая необходимости в методах получения и установки в стиле шаблона J2EE Transfer Object .Просто следите за тем, чтобы бизнес-логика закралась туда, и не забывайте о equals () и hashCode () .

Существует некоторая помощь, доступная для сопоставления ваших объектов и от них.однако в Spring JDBC, например, RowMapper и MappingSqlQuery .Вы также можете проверить платформу Object Relational Mapping, например Spring ORM , чтобы сэкономить некоторые усилия.Я думаю, что эти подходы экономят время при написании кода перевода в и из SQL, управлении транзакциями и схемой базы данных - нам все еще нужно создать объектную модель.

0 голосов
/ 23 июля 2011

Как упомянул Брабстер, RowMapper и MappingSQLQuery помогут вам преобразовать ваши наборы результатов sql в объекты. Но я понимаю, что вы обеспокоены тем, что вы не всегда извлекаете целые объекты из запросов, а иногда вы извлекаете комбинацию объектов (выполняя sql-соединения).

Так что, если я правильно понимаю, вам интересно, придется ли вам создавать классы для каждой из этих комбинаций объектов тоже?

Простой ответ - нет, вам не нужно создавать пользовательские классы для каждого типа запроса на объединение, но при отсутствии надлежащего ORM вам придется предоставлять RowMappers для каждого типа объединения (обратите внимание, что M в ORM выступает за картирование). Поскольку среда JDBC Spring не является ORM, она требует предоставить логику отображения для каждого запроса. Если это звучит слишком много работы, добро пожаловать в мир ORM:)

...