моделирование домена ibatis - PullRequest
1 голос
/ 26 апреля 2010

Я работаю над моделью домена для проекта. У меня есть класс с именем user, который имеет класс с именем UserType в качестве одного из свойств. Я знаю, когда я хочу выбрать всех пользователей, я буду использовать объединения, чтобы выбрать все соответствующие типы пользователей. Как мне сделать вставки? Должен ли я написать обработчик для userType? Или я могу сделать что-то вроде

INSERT INTO users(... usertype_id ...) VALUES(... #{usertype.usertype_id}...)

Пожалуйста, помогите;

Я провел весь день, пытаясь понять это. Я использую ibatis 3.0, и я новичок в ibatis.

1 Ответ

3 голосов
/ 26 апреля 2010

Ibatis не является полноценной средой ORM, поэтому он не знает об отношениях объектов. Так что да, вы должны написать что-то вроде вашего INSERT , если вы хотите работать непосредственно с объектами домена, которые не полностью соответствуют записи в вашей таблице; то есть, если объект User, который вы отображаете в Ibatis, не имеет метода getUsertypeId() (который возвращает значение, соответствующее столбцу таблицы usertype_id), а вместо этого getUserType() метод.

(Конечно, вы также можете написать getUsertypeId() метод, который внутренне вызывает getUserType().getId() ..., но просто остановитесь здесь и не претендуйте также на setUserTypeId(int id), который внутренне пытается загрузить UsertypeId из БД, и т. Д., И т. Д. ... что требует неприятностей. Вы закончите заново изобретать JPA / Hibernate.)

Я не думаю, что TypeHandler является правильным подходом, эта функция больше ориентирована на преобразование нетривиальных типов, а не столько для обработки отношений.

Другой верный подход - иметь слой относительно низкоуровневых POJO, примерно по одному для каждой таблицы, со свойствами, которые отображаются непосредственно на столбцы вашей таблицы (скажем, объект UserDb со свойством userTypeId и нет getUserType() метода, и нет делового интеллекта, зависимостей от верхних уровней или постоянных знаний), а затем, кроме того, слоя более богатых «реальных» доменных объектов, каждый из которых оборачивает (обычно небольшой) граф этих «тупой» POJO и обладает интеллектом, необходимым для вызова уровня персистентности (например, DAO) для загрузки / сохранения графика (возможно, лениво).

Одним из преимуществ этого подхода является то, что ядро ​​реальных отображений ibatis (кодирование SQL) может быть выполнено довольно автоматически с помощью Ibator - он даже создает код POJO из схемы БД.

Для массового чтения данных, которое включает в себя множество таблиц (отчетов), вы можете создавать другие тривиальные специальные POJO (которые соответствуют непосредственно столбцам вашего SELECT и, возможно, имеют некоторый элементарный интеллект для отображения значений - что-то вроде '' ViewModel ') ... или даже HashMaps.

PS: Возможно, вы захотите прочитать о DDD (и таких понятиях, как «сущности», «объекты значений», «представления», «контексты», «объект расширенного домена» и «объекты анемичного домена» например ). Ibatis дает вам большую гибкость для обучения и реализации в этом направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...