Подтвердить что ты не робот

Hibernate или JPA или JDBC или?

Я разрабатываю приложение Java Desktop, но имею некоторые путаницы в выборе технологии для моего уровня персистентности.

До сих пор я использовал JDBC для операций с БД. Сейчас, недавно я изучил Hibernate и JPA, но все же я новичок в этих технологиях.

Теперь мой вопрос: что использовать для моего приложения Java Desktop из следующего?

  • JPA

  • Спящий режим

  • JDBC

  • DAO

  • любое другое предложение от вас...

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

  • Это не сложное приложение. Он содержит только 5 таблиц (и 5 сущностей).
  • Я не хочу, чтобы мой код был гибким, чтобы я мог легко изменить базу данных
  • Размер приложения должен оставаться как можно меньше, так как мне придется распространять его среди моих клиентов через Интернет.
  • Он должен быть свободен в коммерческой разработке и распространении.

============================================================================================== =============================

На основе приведенных ниже ответов я хотел бы пойти с JPA, чтобы я не мог написать код SQL-кода, специфичный для поставщика.

Но у меня есть некоторые проблемы в JPA, которые упоминаются в Java Persistence API

4b9b3361

Ответ 1

Вот мой прием:

  • JPA: Агностический способ сохранения Java без подключения ваших клиентов к Hibernate, TopLink и т.д.
  • Hibernate: Хороший выбор, если у вас есть объектная модель для сопоставления.
  • JDBC: на это построена вся настойчивость Java. Самый низкий уровень
  • DAO: больше шаблонов, чем технология; CRUD.
  • iBatis: на полпути между JDBC (raw SQL) и Hibernate (ORM).
  • JDO: объекты данных Java, которые являются еще одной спецификацией для сохранения Java. (например, Apache JDO)

Это не сложное приложение. Он содержит только 5 таблиц (и 5 лица)

Любое из них будет работать, но JDBC будет самым простым. Все остальные построены поверх JDBC.

Я хочу, чтобы мой код был гибким, чтобы я мог впоследствии изменить базу данных легко

Изменения схемы будут иметь схожие эффекты во всех технологиях.

Размер приложения должен оставаться как можно меньше, так как я должны распространять его среди моих клиентов через интернет.

Использование JPA или Hibernate потребует JAR, который добавит размер вашего развертывания. JDBC минимизирует это.

Он должен быть свободен для использования в коммерческой разработке и распространении.

См. лицензии на все технологии. Не должно быть проблем с любым из них.

FYI: возможно написать общий интерфейс DAO:

package persistence;

import java.io.Serializable;
import java.util.List;

public interface GenericDao<T, K extends Serializable>
{
    T find(K id);
    List<T> find();
    List<T> find(T example);
    List<T> find(String queryName, String [] paramNames, Object [] bindValues);

    K save(T instance);
    void update(T instance);
    void delete(T instance);
}

Если ваши объекты отображают 1:1 с вашими пятью таблицами, я бы сказал, что JPA - это квадрат переполнения.

Является ли ваше приложение в настоящее время порядка 3 МБ JAR? Если нет, то Hibernate или JPA удваивают размер. Вы можете точно определить, сколько. И там более одного JAR, потому что у них обоих есть зависимости.

YAGNI говорит, что вы должны держать его простым. Это пять столов!

Изменение поставщика, если вы делаете это правильно, означает переключение JAR JDBC-драйвера JAR, изменение имени класса драйвера и добавление нового URL-адреса подключения, который вы должны делать независимо от того, какую технологию вы выбираете.

Я нахожу, что базы данных не меняют это радикально. Вы измените схему, но весь поставщик? Скорее всего, особенно если у вас несколько клиентов. Это будет серьезное неудобство для создания баз данных базового коммутатора.

Какую из них вы планируете отправить? HSQL или что-то, что потребует установки, такой как MySQL? Это более актуальная проблема.

Ответ 2

JPA, безусловно, подходит для того, чтобы вы хотели использовать привязку отношения к объекту - это реализация агностическая (что означает, что вы можете использовать ее с Hibernate, Toplink и т.д.), и это стандарт de facto. Hibernate имеет богатый набор функций, но это нестандартное решение - многие используют его, хотя... Я лично всегда использую JPA, поддерживаемый Hibernate. Я стараюсь держаться подальше от спящего человека, но при необходимости - это для меня.

Использование структуры, такой как JPA/Hibernate для 5 таблиц, может быть немного избыточным. Ваше приложение будет около 5 МБ больше и будет потреблять больше помета. Вы можете просто использовать JDBC в паре с DAO.

Поскольку JDBC использует SQL, специфичный для поставщика (базы данных), это может быть проблематично, вы планируете использовать разные базы данных. JPA имеет явное преимущество в этой области.

Независимо от того, что вы выберете, вы не ошибетесь - вам нужно спросить себя, в основном, о увеличенном размере и потреблении памяти, и вы готовы написать код DAO JDBC. Я вообще ненавижу это: -)

Ответ 3

Для этого масштаба все будет работать нормально. Рассмотрим iBatis.