Lekka alternatywa dla Hibernate? [Zamknięte]


113

Mam program java dla jednego użytkownika, który chciałbym przechowywać w lekkiej bazie danych, takiej jak Derby lub Sqlite. Chciałbym użyć warstwy abstrakcji danych w moim programie. Wygląda na to, że Hibernacja wymaga dużo konfiguracji i jest przesadą w stosunku do tego, czego potrzebuję. Jakie są lekkie alternatywy dla Hibernate?


2
Możesz sprawdzić alternatywy wraz z przykładowym zastosowaniem (i przykładową konfiguracją ze Springiem
Břetislav Wajtr

CMobileCom JPA to lekka implementacja JPA zarówno dla języka Java, jak i Androida. Jego rozmiar to około 380K. Jest lekki i szybki. cmobilecom.com
John

Odpowiedzi:


142

Hibernacja wymaga prawie zerowej konfiguracji, jeśli używasz adnotacji. Może nawet automatycznie wykrywać zmapowane ziarna w ścieżce klas! Nie widzę dla niego żadnej alternatywy zarówno z prostoty, jak i z punktu widzenia mocy.

Może również ujawnić się jako JPA, co jest (IMHO) jeszcze prostsze.


32
obok zera nie oznacza zera.
njzk2

12
również potrzebuje wielu zewnętrznych bibliotek próbujących go używać na Androidzie: P
sherif

4
Próbowałem znaleźć prostszą alternatywę dla Hibernate. W osobistym projekcie użyłem MyBatis (co za okropna nazwa). To było dużo więcej pracy niż Hibernate. Hibernate naprawdę oszczędza dużo kodu SQL i pomaga w relacjach rodzic-dziecko. Przyjrzałem się także kilku ORMom w stylu ActiveRecord dla Javy. Żaden nie wydawał się dojrzały ani łatwiejszy niż Hibernate. Więc wracam do Hibernate.
devdanke

56
czy nie chodziło o ALTERNATYWĘ?
Łukasz Gruner

8
Hibernate nie jest lekką alternatywą dla Hiberernate
cosbor11

55

Moja biblioteka ORMLite jest jedną z takich alternatyw. Obsługuje MySQL, Postgres, Microsoft SQL Server, H2, Derby, HSQLDB i Sqlite i można go łatwo rozszerzyć na inne. Używa adnotacji do konfigurowania klas, dobrej obsługi Springa, elastycznego konstruktora zapytań itp.


OrmLite naprawdę wygląda obiecująco! Ale czy ten projekt wciąż żyje? Brak nowej wersji od ponad roku, brak odpowiedzi na żądania ściągnięcia / problemy z Github.
Stefan

3
Wersja 5.0 została wydana w czerwcu 2016 r.
Lauri Laanti

Wersja 5.1 została wydana 19.02.2018 r. Ale nie jest w ogóle porównywalny z Hibernate, a niektóre implementacje adnotacji JPA nie działają poprawnie.
M-Razavi,

„porównywalne z Hibernate”? Oba są ORMami, ale poza tym bardzo się różnią. Jeśli chodzi o implementacje JPA, prosimy o wypełnienie raportu o błędzie, jeśli znajdziesz coś @ M-Razavi.
Gray

31

Nadal wymaga konfiguracji XML, ale spójrz na MyBatis (dawniej iBatis) .


iBatis jest bardzo lekki. Możesz łatwiej definiować i kontrolować mapowanie SQL do obiektów.
Berlin Brown

... musisz oddać głos na iBatis, choć pamiętaj, że nie jest to alternatywa dla ORM, ponieważ nie próbuje konkurować z Hibernate. To trochę inny rodzaj zwierzęcia, ale pasuje do tego, czego szukasz pod względem wagi.
wektor

1
Teraz pozostało MyBatis
Vladislav Rastrusny

3
Myślę, że XML w i / MyBatis jest faktycznie zaletą, ponieważ przechowuje skomplikowane zapytania w formacie, który można łatwo skopiować do konsoli SQL w celu przetestowania.
Peter Tillemans

22

jOOQ jest dostarczany z płynnym DSL symulującym SQL bezpośrednio w Javie jako efekt uboczny dla głównych celów, którymi są:

  • Generowanie kodu źródłowego
  • Pełne wsparcie dla standardowego SQL, w tym funkcje języka SQL, takie jak UNION, zagnieżdżone SELECT, wszystkie typy JOIN, aliasing (np. Do samodzielnego łączenia) itp.
  • Szerokie wsparcie dla niestandardowych SQL, w tym UDT, procedur składowanych, funkcji specyficznych dla dostawcy itp.

Przeczytaj o jOOQ w tym artykule: http://java.dzone.com/announcements/simple-and-intuitive-approach lub odwiedź stronę bezpośrednio: http://www.jooq.org

(Zastrzeżenie, pracuję dla firmy stojącej za jOOQ)


3
jOOQ rządzi! Wdrożyliśmy z nim usługę ETL na dużą skalę i nie mogliśmy być szczęśliwsi. Użyłem iBATIS, a jOOQ daje te same zalety niskopoziomowego SQL bez ryz XML i braku bezpieczeństwa typów.
spieden

3
Zapomniałem wspomnieć o jednej z najlepszych cech jOOQ: złożone i / lub dynamicznie generowane zapytania mogą być składane w kontrolowany sposób i weryfikowane przez kompilator Javy, oszczędzając ci tych wszystkich niejednoznacznych błędów składniowych, które generują bazy danych i zapewniając regresję w czasie kompilacji zakres obowiązywania, gdy schemat zmieni się pod Tobą.
spieden

JOOQ jest niesamowity, ale oczywiście nie jest teraz darmowy dla Oracle i Sybase, więc wielu ludzi unika tego frameworka i używa go jak MyBatis
Makky

@Makky: Dziękujemy za Twoją opinię. Mam nadzieję, że pamiętasz o rzeczywistych propozycjach wartości i nie zamierzasz przełączać się na zupełnie inny framework tylko w oparciu o fakt, że jeden jest darmowy, a drugi nie. Koszt utrzymania i migracji, jaki to spowodowałoby w twoim oprogramowaniu, jest zaporowy i daleko przekracza jakąkolwiek rozsądną licencję komercyjną ...
Lukas Eder

15

Apache Commons DBUtils eliminuje większość powtarzających się czynności związanych z programowaniem JDBC. Wymaga niewielkiej konfiguracji i jest łatwy do nauczenia. Nie jest to struktura ORM (w taki sposób, w jaki Hibernate i inne wspomniane tutaj frameworki), ale automatyzuje mapowanie kolumn SELECT na pola składowe Java, a także inne powtarzalne zadania programistyczne JDBC. Z pewnością jest lekki.



9

Cayenne dobrze mi służyło. Stosunkowo łatwy do zrozumienia i uruchomienia. Uważam, że część dotycząca inżynierii odwrotnej jest szczególnie urocza. Konfigurację można przeprowadzić za pomocą GUI.


6

Mogę zaproponować Apache empire-db. http://incubator.apache.org/empire-db/

Apache Empire-db to relacyjny komponent utrwalania danych typu Open Source, który umożliwia niezależne od dostawcy bazy danych definiowanie dynamicznych zapytań, a także bezpieczne i proste pobieranie i aktualizowanie danych. W porównaniu z większością innych rozwiązań, takich jak np. Implementacje Hibernate, TopLink, iBATIS lub JPA, Empire-db przyjmuje znacznie inne podejście, ze szczególnym uwzględnieniem bezpieczeństwa w czasie kompilacji , ograniczenie nadmiarowości i zwiększoną produktywność programistów.

Przykład:

// Define the query
DBCommand cmd = db.createCommand();
DBColumnExpr EMPLOYEE_FULLNAME= db.EMPLOYEES.LASTNAME.append(", ")
                        .append(db.EMPLOYEES.FIRSTNAME).as("FULL_NAME");
// Select required columns
cmd.select(db.EMPLOYEES.EMPLOYEE_ID, EMPLOYEE_FULLNAME);
cmd.select(db.EMPLOYEES.GENDER, db.EMPLOYEES.PHONE_NUMBER);
cmd.select(db.DEPARTMENTS.NAME.as("DEPARTMENT"));
cmd.select(db.DEPARTMENTS.BUSINESS_UNIT);
// Set Joins
cmd.join(db.EMPLOYEES.DEPARTMENT_ID, db.DEPARTMENTS.DEPARTMENT_ID);
// Set contraints and order
cmd.where(EMP.LASTNAME.length().isGreaterThan(0));
cmd.orderBy(EMP.LASTNAME);;


2

Mogę się trochę spóźnić na imprezę, ale wydałem ActiveJDBC w 2010 roku, który jest implementacją wzorca ActiveRecord ORM, jest ponad 10 razy lżejszy niż Hibernate w zależnościach, co najmniej dwa razy szybszy w czasie wykonywania i nie wymaga konfiguracji lub adnotacje.


1

Możesz rzucić okiem na prevayler (na sourceforge). Nieco lżejsze podejście do wytrwałości. A może myślałeś o raportowaniu przeciwko DB?




-2

Kiteframework to również bardzo lekki framework ORM. Zapewnia prawie wszystkie operacje db przy minimalnych konfiguracjach.

http://deipakgarg.github.com/Kite-ORM/

Ujawnienie: jestem autorem tego projektu


3
Witamy w Stack Overflow! Dziękujemy za przesłanie odpowiedzi! Przeczytaj uważnie często zadawane pytania dotyczące autopromocji . Należy również pamiętać, że jest to konieczne , aby umieścić disclaimer każdym razem, gdy odwołują się do swojej własnej strony / produktu.
Andrew Barber

2
nie jest w fazie rozwoju, nie ma nowego aktualnego wydania od autora, ostatnie oczekiwane wydanie było w 2012 roku.
Barun
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.