2008-09-23 1 views
7

Сейчас я делаю чрезвычайно простой сайт - около 5 страниц. Вопрос в том, что это слишком много, и стоит потратить время на интеграцию какого-то решения для сопоставления базы данных, или если было бы лучше просто использовать простой старый JNDI. У меня будет, может быть, дюжина вещей, которые мне нужно читать/писать из базы данных. Я предполагаю, что у меня есть базовое понимание этих технологий, но все равно потребуется много ссылок на документацию. Кто-нибудь еще сталкивался с этим решением раньше?Когда использовать Hibernate/JPA/Toplink?

EDIT: К сожалению, я должен был указать JNDI для поиска соединения DB и JDBC для выполнения операций.

ответ

17

Короткий ответ: это зависит от сложности, которую вы хотите поддержать.

Длинный ответ:

Прежде всего, ORM (объектно реляционного отображения - отображение базы данных как вы это называете -) и JNDI (Java Naming и Directory интерфейсы) это две разные вещи.

Первый, как вы уже знаете, используется для сопоставления таблиц базы данных с классами и объектами. Во-вторых, чтобы обеспечить механизм поиска ресурсов, они могут быть DataSources, Ejb, Queues или другими.

Возможно, ваше среднее значение «JDBC».

Теперь, что касается вашего вопроса: если это так просто, возможно, нет необходимости внедрять ORM. Таблицы с номерами будут составлять не более 5-10, и, на мой взгляд, операции действительно просты.

Возможно, использование простого JDBC будет достаточно.

Если вы используете шаблон DAO, вы можете изменить его позже, чтобы поддержать стратегию ORM, если это необходимо.

Как это: Скажем, у вас есть таблица Employee

Создание Employee.java со всеми полями БД вручную (это не должно занять слишком много времени) и EmployeeDaO.java методов, такие как:

+findById(id): Employee 
+insert(Employee) 
+update(Employee) 
+delete(Employee) 
+findAll():List<Employee> 

и реализация довольно прямо вперед:

select * from employee where id = ? 
insert into employee (bla, bla, bla) values (? , ? , ?) 
update etc. etc 

Когда (и если) приложение становится слишком сложным вы м ay изменить реализацию DAO. Например, в методе «select» вы меняете код на использование объекта ORM, который выполняет операцию.

public Employee selectById(int id) { 
     // Commenting out the previous implementation... 
     // String query = select * from employee where id = ? 
     // execute(query) 

     // Using the ORM solution 

     Session session = getSession(); 
     Employee e = (Employee) session.get(Employee.clas, id); 
     return e; 
} 

Это просто пример, в реальной жизни вы можете позволить абстрактном завод создать ORM DAO, но это оффтоп.Дело в том, что вы можете начать простую и используя шаблоны desing, вы можете изменить реализацию позже, если это необходимо.

Конечно, если вы хотите научиться технологии, вы можете начать работать с одним столом.

Выбор того или иного решения (решение ORM) зависит в основном от технологии, которую вы используете. Например, для JBoss или других продуктов с открытым исходным кодом Hibernate отлично. Это open source, есть много ресурсов, из которых можно учиться. Но если вы используете то, что уже имеет Toplink (например, сервер приложений oracle), или если база уже построена на Toplink, вы должны оставаться в этой структуре.

Кстати, поскольку Oracle купил BEA, они заявили, что заменяют Kodo (weblogic peresistence framework) с помощью toplink в теперь называемом «Oracle Weblogic Application Server».

Я оставляю вам несколько ресурсов, где вы можете получить больше информации об этом:


В этом «Узоры Enterprise Application Architecture» книги, Мартин Фаулер, объясняет, где использовать один или другой, здесь каталог , Посмотрите на Источник данных образцы архитектуры против объектно-реляционная поведенческой модели:

PEAA Catalog


DAO (Data Access Object) является частью каталога шаблонов ядра J2EE:

The DAO pattern


Это учебное пособие по стартеру для спящего режима:

Hibernate


Официальный сайт Toplink:

Toplink


Наконец я "думаю" хороший думать о JPA является то, что вы можете изменить поставщиков в последнее время.

Начать простую, а затем развиваться.

Надеюсь, это поможет.

1

Кажется, что это было бы излишним для очень простого приложения, особенно если у вас нет планов расширять его когда-либо. Тем не менее, похоже, что было бы целесообразно использовать их с этим простым приложением, чтобы вы лучше понимали, как они работают в следующий раз, когда у вас есть что-то, что может их использовать.

1

Вы имели в виду простую старую JDBC? Небольшой проект может стать хорошей возможностью поднять одну из структур ORM, особенно если у вас есть время.

Без дополнительной информации трудно дать рекомендацию так или иначе.

1

Мое правило, если оно доступно только для чтения, я готов сделать это в JDBC, хотя я предпочитаю использовать пустой проект Hibernate с SQLQuery, чтобы использовать сопоставление типов Hibernate. Как только я должен делать записи, я перехожу с Hibernate, потому что гораздо проще установить несколько атрибутов, а затем вызвать save, чем устанавливать каждый столбец отдельно. И когда вам нужно начинать оптимизацию, чтобы избежать обновлений на неизмененных объектах, вам лучше работать с OR/M и его грязной проверкой. Работа с отношениями с внешними ключами - еще один признак того, что вам нужно сопоставить его один раз, а затем использовать геттеры. Та же логика применима к Toplink, хотя, если они не добавили что-то вроде HQL за 3 года с момента его использования, Hibernate будет намного лучше для такого перехода от чистого SQL. Имейте в виду, что вам не нужно сопоставлять каждый объект/таблицу, только те, где есть явное преимущество. По моему опыту, большинство проектов, которые не используют существующий OR/M, в конечном итоге создают новый, что является плохой идеей.

1

best способ узнать ORM находится на небольшом проекте. Начните с этого проекта.

Как только вы его повесите, вы будете использовать ORM для всего.

Для ORM нет ничего слишком малого. После первых двух проектов вы обнаружите, что не можете работать иначе. Картирование ORM обычно имеет больше смысла, чем любой другой способ работы.

Смежные вопросы