Jakieś dobre narzędzia ORM do tworzenia Androida? [Zamknięte]

285

Czy ktoś pracujący na Androidzie („gPhone”) ma lub zna miejsce, w którym mogę znaleźć dobre narzędzie ORM? Kod jest napisany w Javie, a bazą danych jest SQLite. Chciałbym znaleźć narzędzie, które ma definicję obiektu, może automatycznie generować tabele i funkcje CRUD (byłoby to niesamowite), lub, poza tym, narzędzie, które może przyjąć definicję tabeli, definicję obiektu, i automatyczne generowanie funkcjonalności CRUD. Pocieszeniem jest to, że wszystko to musi się zdarzyć w ramach systemu Android, który ma swoje własne konwencje dotyczące sposobu dostępu do bazy danych.

GWLlosa
źródło
Nie sądzę, że są już dostępne.
mparaz
2
jego 2014. Pomyślałem, że wspomnę o Sprinkles ( github.com/emilsjolander/sprinkles ), ponieważ nikt o tym nie wspominał. 500 gwiazd na github, na Meaven Central, obserwatorzy treści, warto sprawdzić
AndroidGecko
Jest 2015. Software Tree wydało niedawno JDXA , prosty, ale potężny i elastyczny ORM dla Androida. Obsługuje dziedziczenie, jeden do jednego, jeden do wielu, wiele do jednego i wiele do wielu relacji. Nieinwazyjny model programowania JDXA POJO (Plain Old Java Objects) nie wymaga w żaden sposób zmiany klas Java: - Nie trzeba podklasować klas domen z żadnej klasy bazowej - Nie trzeba zaśmiecać kodu źródłowego adnotacjami - Nie ma potrzeby korzystania z klas DAO - Brak generowania kodu źródłowego
Damodar Periwal
Sprawdź ten fajny samouczek na temat JDXA ORM .
Damodar Periwal
Jeśli wolisz zwykły naturalny kod Androida bez dodatkowych zależności bibliotecznych, zapoznaj się z przykładem generatora kodu klasy równorzędnej SQLite . Jest oparty na adnotacjach i obsługuje połączone klucze podstawowe, połączone unikalne ograniczenia i indeksowanie.
RookieGuy

Odpowiedzi:

111

Pomyślałem, że po prostu dodam tutaj 0,02 $ o moim pakiecie ORMLite .

Jest to lekki zamiennik Hibernacji i wykorzystuje natywne wywołania bazy danych systemu operacyjnego Android do obsługi SQLite na Androidzie. Obsługuje również wiele innych typów baz danych przy użyciu JDBC na innych architekturach. Mamy listę mailingową Androida na pytania ORMLite.

Szary
źródło
1
Czy ORMLite ma wbudowaną obsługę relacji (jeden | wiele) -do- (wiele | jeden)? Nie mogę znaleźć wielu informacji na ten temat ... Jeśli nie, czy są na to plany?
ferdystschenko
1
Zależy, co rozumiesz przez „wsparcie”. Istnieje przykładowy kod, w jaki sposób korzystać z „obcych obiektów”, które są sposobem, w jaki można przejść od jednego do wielu, oraz istnieją przykłady, w jaki sposób korzystać z tabel łączenia, aby uzyskać wiele do wielu ( ormlite.com/docs/examples ). Opublikuj post na liście użytkowników z dodatkowymi pytaniami ( groups.google.com/group/ormlite-user ).
Gray
7
Tak, z pewnością jest większy niż ActiveAndroid. Oczywiście o wiele więcej funkcji. Również darmowy w przeciwieństwie do licencji AA. Ale jeśli celem jest rozmiar, ORMLite nie jest dla Ciebie.
Gray
4
@Gray Ironic, ponieważ ma to być „Lite”: P
Salman von Abbas
5
Rzeczywiście @SalmanPK. Chociaż istnieją różne stopnie lite. :-)
Gray
66

To pytanie nie może się starzeć, ale sugerowane ramy mogą. Oto pierwsza lista tego, co uważam za ważne w takich ramach dla porównania:

  • Czy istnieje artefakt Maven lub Gradle? (to duży plus w zależności od tego, czy używasz maven czy gradle, oczywiście)
  • Czy kod jest dostępny w łatwy sposób, w tym szybki przegląd zatwierdzeń w celu oceny działania? (kod hostowany na githubie jest dla mnie zdecydowanym plusem)
  • Zarządzanie wydaniami: czy istnieją dla niego wydania / znaczniki wydań i artefakty? (niektóre z nich są hostowane na githubie i wymagają albo klonowania git, albo oferują do ściągnięcia główny plik tar - dla mnie duży minus, jeśli nawet nie ustawiono tagów wydania w README)
  • ponieważ rozmiar ma znaczenie, podałem kilka wskazówek, gdzie łatwo było się z tym pogodzić (nic nie pobrałem, więc z projektów, które nie zawierają artefaktów wydania, nie ma rozmiarów)

A oto lista ram z notatkami na temat powyższych punktów. Spojrzałem bardziej na aBatis i Hadi, ale dodałem tylko te, które miały trochę aktywności po 2011 roku.

Nie próbowałem żadnego z nich, ale być może mogę zaoszczędzić trochę czasu obecnym czytelnikom, wymieniając obecnie aktywne projekty. Proszę dodać komentarz, jeśli znasz inne projekty, które spełniają niektóre z powyższych punktów i mają poważny rozwój (z czasem).

EDYCJA (listopad 2013 r.): Zaktualizowano listę do bieżącego stanu projektów. Niektóre z nich dodały tagi wydania do repozytoriów github, a także obsługę Maven / Gradle. Dobra robota!

EDYCJA (kwi 2015): zaktualizowałem listę, dodałem Sprinkles (zgodnie z komentarzem @AndroidGecko) i Realm.io.

Risadinha
źródło
Zdecydowanie polecam używać Realm, jest naprawdę szybki i płynny w pracy!
Crono,
39

Jeśli wydajność i rozmiar kodu mają znaczenie, sprawdź greenDAO . Jestem jego autorem, a moją motywacją do stworzenia kolejnej ORM było uniknięcie odbicia w hotspotach. Okazało się, że greenDAO może być nawet 4 razy szybszy niż ORMLite. Kasy na stronie funkcji szczegóły.

Markus Junginger
źródło
5
Wygląda całkiem nieźle, ale konieczność wygenerowania
dao
4
Tak, generowanie kodu jest dodatkowym krokiem dla programistów, ale pozwala zaoszczędzić sporo wydajności w aplikacji. Wyniki ładowania bazy danych i parsowania są znacznie szybsze. Inne narzędzia polegają na odbiciu, które w systemie Android jest okrutnie wolne.
Markus Junginger
1
W swoich projektach korzystam z zielonego programu i jestem z tego bardzo zadowolony.
mabac
3
@greenrobot czy masz jakieś prezentacje „dużych aplikacji” przy użyciu swojej biblioteki?
StErMi
1
@StErMi Path używa greenDAO. Mają> 1 mln instalacji. Zobacz github.com/greenrobot/greenDAO/issues/20#issuecomment-13278922
Markus Junginger
10

Nie znam niczego, o co dokładnie prosisz, ale istnieje alternatywa dla SQLite, która może okazać się przydatna, jeśli wymagania dotyczące architektury są elastyczne. Może warto sprawdzić db4o :

slf
źródło
miałem dobre wyniki z DB40 ... chociaż chcę kasy Aktywny Android ...
Ben
1
activeandroid.com wygląda fajnie, nie mogę się doczekać, aby to
zmienić
9

ActiveAndroid (20 USD) wygląda na to, że może być dokładnie tym, czego potrzebujesz.

Michael Pardo
źródło
14
Wiem, że nie próbujesz tutaj nic dziwnego, ale czy możesz ujawnić swoje powiązanie w swoich postach, gdy wspominasz o jednym z własnych produktów na SO? Wiem, że twoje imię znajduje się w stopce połączonej strony, ale staramy się tłumić podczas astroturfingu (co nie jest prawdą ), dlatego prosimy wszystkich o przestrzeganie tych samych wskazówek dotyczących ujawniania informacji. Dzięki.
Bill the Lizard
4
Tylko heads-up, ActiveAndroid nie jest darmowy.
gak
7
ActiveAndroid jest teraz darmowy i open-source - pardom.github.com/ActiveAndroid
Michael Pardo,
7

Podobał mi się ActiveAndroid. Wygląda na to, że jest napisany specjalnie dla Androida. To dla mnie plus.

Mam trochę doświadczenia w Ruby on Rails i jeśli podoba Ci się sposób ActiveRecord w Railsach, możesz bardzo szybko zacząć korzystać z tej biblioteki.

https://www.activeandroid.com/

Tony Topper
źródło
Ładne środowisko, ale koliduje z biblioteką org.codehous.jackson, więc jeśli użyjesz go w swoim projekcie, nie będziesz mógł używać ActveAndroid
endryha
1
Jak to koliduje? Czy zgłosiłeś go jako błąd w tracker.activeandroid.com ?
Michael Pardo
Może rzucisz okiem na androrm.the-pixelpla.net ma większość funkcji i powiedziałbym jeszcze więcej. Plus: jest darmowy i open source.
philgiese,
6

Szukam również ORM na Androida. Testowałem ActiveAndroid , NeoDatis i db4o i myślę, że będę używać jednego z dwóch ostatnich.

NeoDatis i db4o są bardzo podobne, dlatego chciałbym uzyskać porady dotyczące wyboru najlepszego. Czy ktoś używa jednego z nich w swoim projekcie? Użyję go do darmowej i płatnej aplikacji, ale wydaje się, że ta dwójka nie ma żadnych ograniczeń licencyjnych dla Androida.

Jest tu test porównawczy , który wydaje się mówić, że NeoDatis jest szybszy niż db4o, ale nie wiem, czy możemy na tym oprzeć moją opinię.

Chayy
źródło
Db40 i NeoDatis są obiektowa baza danych, tylko rozmiar z nich jest całkowicie wygórowane być dowolnego wykorzystania na Androida
Bostone
@ DroidIn.net czy możesz podać link podtrzymujący twój komentarz?
Sergio
3

Jeszcze jeden nowicjusz: android-active-record. Jest to bardzo lekki i łatwy w użyciu system utrwalania dla Androida wspierany przez SQLite http://code.google.com/p/android-active-record/

Vladimir Kroz
źródło
Wygląda na to, że wciąż jest na wczesnym etapie rozwoju, ale warto mieć na oku!
GWLlosa,
Próbowałem - to dobry początek, ale potrzeba dużo pracy, aby być przygotowanym na najwyższy czas
Bostone
2

ActiveRecordJS z Aptana to JavaScript ORM, który powinien działać na gPhone. Jest przeznaczony do współpracy z Jaxer i Gears. Gdy korzystasz z adapterów Jaxer, możesz połączyć się z SQLLite.

AKTUALIZACJA: Nie wydaje mi się, żeby to było jasne, ale ActiveRecordJS to ORM, który działa po stronie klienta, co może być dla ciebie zaletą na gPhone.

David Robbins
źródło
W kodzie Java? Lub w kodzie JavaScript?
GWLlosa
Jestem prawie pewien, że mówisz o rozwiązaniu JavaScript przeznaczonym wyłącznie do aplikacji przeglądarkowych (internetowych). Nie rozumiem, jak to się wiąże z tworzeniem aplikacji natywnych na Androida.
Brian Lacy
1

Opracowałem własną implementację JPA ORM dla Androida. Nie jest jeszcze w pełni ukończona, ale możesz dodawać adnotacje do klasy za pomocą adnotacji @Entity, @Id, @Column, a otrzymasz encje JPA, które można przechowywać i odzyskiwać z bazy danych SQLite. Potrzebuje więcej funkcji i czyszczenia, zanim opublikuję go publicznie, ale jeśli będzie wystarczająco zainteresowania, może to przyspieszyć mój wysiłek.

Pavel Lahoda
źródło
Brzmi interesująco, czy masz już s.th. spojrzeć na / spróbować? Na zdrowie, Martin
MartinGrotzke
Ponad rok później, jak postępy w tym zakresie? JPA + Adnotacje na Androida brzmią WIELKO!
Spidey,
1

Mój własny DroidParts /http://droidparts.org/ właśnie osiągnął v0.5. To biblioteka DI / ORM i nie tylko.
Niewiele dokumentacji, ale zawiera przykładową aplikację.

Janchenko
źródło
1
Dobrym pomysłem może być dodanie odpowiedniej dokumentacji.
Subin Sebastian,
0

Miałem negatywne doświadczenia z db4o (w. 8): indeksowanie nie działało poprawnie (wyjątek itp.). Nie udało mi się więc uniknąć tworzenia duplikatów w obcych tabelach, mając obiekt w strukturze obiektu. Bardziej szczegółowe wyjaśnienie w moim pytaniu . Mam nadzieję, że któregoś dnia byłoby lepiej.

Oleksii Malovanyi
źródło