Я разрабатываю Настольное приложение Java, но имею некоторые беспорядки в выборе технологии для моего слоя персистентности.
До настоящего времени я использовал JDBC для операций DB. Теперь, Недавно я учился, в спящем режиме и JPA, но тем не менее я - новичок на этих технологиях.
Теперь мой вопрос состоит в том, Что использовать для моего Настольного приложения Java от следующего?
JPA
Быть в спящем режиме
JDBC
ДАО
любое другое предложение от Вас...
Я знаю, что нет никакого лучшего выбора от них, и это полностью зависит от сложности и requeirements проекта, таким образом, ниже требования моего проекта
==================================== ОТРЕДАКТИРОВАННЫЙ =======================================
На основе ниже ответов, я хотел бы пойти с JPA, чтобы препятствовать тому, чтобы я писал определенный для поставщика код SQL.
Но у меня есть некоторые проблемы в JPA, которые упоминаются в Персистентности Java API
В этом масштабе все будет работать нормально. Рассмотрим также iBatis .
Вот мое мнение:
Это не сложное приложение. Оно содержит только 5 таблиц (и 5 сущностей)
Любой из них будет работать, но JDBC будет самым простым. Все остальные построены поверх JDBC.
Я хочу сделать свой код гибким, чтобы впоследствии я мог изменить базу данных легко
Изменения схемы будут иметь схожие эффекты во всех технологиях.
Размер приложения должен оставаться как можно меньше, так как мне придется придется распространять его среди моих клиентов через интернет.
Использование JPA или Hibernate потребует JARs, которые увеличат размер вашего развертывания. JDBC позволит свести это к минимуму.
Он должен быть свободен для использования в коммерческой разработке и распространении.
См. лицензии всех технологий. Ни с одной из них не должно быть проблем.
К вашему сведению: можно написать общий интерфейс 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 - это перебор в квадрате.
Ваше приложение в настоящее время имеет JAR размером порядка 3MB? Если нет, то Hibernate или JPA увеличат размер более чем в два раза. Вы можете точно определить, насколько. И это не один JAR, потому что у них обоих есть зависимости.
YAGNI говорит, что нужно быть проще. Это пять таблиц!
Смена поставщика, если вы сделаете это правильно, означает смену JDBC-драйвера JAR, изменение имени класса драйвера и добавление нового URL подключения - что вы должны сделать независимо от того, какую технологию вы выбрали.
Я считаю, что базы данных не меняются так радикально. Вы измените схему, но всего производителя? Вряд ли, особенно если у вас несколько клиентов. Будет большим неудобством заставить базу пользователей поменять базу данных.
С какой из них вы планировали поставлять? HSQL или что-то, что потребует установки, как MySQL? Это более актуальный вопрос.
JPA, безусловно, является тем способом, которым следует идти, если вы хотите использовать отображение объектных отношений - он не зависит от реализации (то есть вы можете использовать его с Hibernate, Toplink и т.д.) и является стандартом де-факто. Hibernate имеет более богатый набор функций, но это нестандартное решение - многие люди используют его... Лично я всегда использую JPA с поддержкой Hibernate. Я стараюсь держаться подальше от специфичных для Hibernate вещей, но если это необходимо - они там для меня.
Использование такого фреймворка, как JPA/Hibernate для 5 таблиц может быть немного излишним. Ваше приложение будет примерно на 5 Мб больше и будет потреблять больше памяти. Вы можете просто использовать JDBC в паре с DAO.
Поскольку JDBC использует SQL, который зависит от производителя (базы данных), это может быть проблематично, если вы планируете использовать различные базы данных. JPA имеет явное преимущество в этой области.
Что бы вы ни выбрали, вы не можете ошибиться - вы должны спросить себя, является ли увеличение размера и потребления памяти проблемой, и готовы ли вы писать код DAO JDBC. Я вообще ненавижу это :-)