Qualche buon strumento ORM per lo sviluppo Android? [chiuso]


285

Chiunque lavori su Android ('gPhone') ha o conosce un posto dove posso trovare un buon strumento ORM per questo? Il codice è scritto in Java e il database è SQLite. Quello che vorrei trovare è uno strumento che ha dato la definizione dell'oggetto, in grado di generare automaticamente le tabelle e le funzioni CRUD (sarebbe fantastico) o, a parte questo, uno strumento che può prendere la definizione della tabella, la definizione dell'oggetto, e generare automaticamente la funzionalità CRUD. Il problema è che tutto ciò deve avvenire all'interno del framework Android, che ha le sue convenzioni su come funziona l'accesso al database.


Non penso che ce ne siano disponibili ora.
mparaz,

2
è il 2014. Ho pensato di menzionare Sprinkles ( github.com/emilsjolander/sprinkles ) poiché nessuno lo ha menzionato .. 500 stelle su github, su meaven central, osservatori di contenuti, vale la pena controllare
AndroidGecko

È il 2015. Software Tree ha recentemente rilasciato JDXA , un ORM semplice ma potente e flessibile per Android. Supporta l'ereditarietà, uno a uno, uno a molti, molti a uno e molti a molti rapporti. Il modello di programmazione non intrusiva di POJO (Plain Old Java Objects) di JDXA non richiede di modificare le classi Java in alcun modo: - Non è necessario sottoclassare le classi di dominio da alcuna classe di base - Non è necessario ingombrare il codice sorgente con annotazioni - Nessuna necessità di classi DAO - Nessuna generazione di codice sorgente
Damodar Periwal

Dai un'occhiata a questo simpatico tutorial su JDXA ORM .
Damodar Periwal,

Se si preferisce un semplice codice Android naturale senza dipendenze di libreria aggiuntive, consultare l' esempio del generatore di codice classe peer SQLite . È basato su annotazioni e supporta chiavi primarie combinate, vincoli univoci combinati e indicizzazione.
RookieGuy

Risposte:


111

Ho pensato di aggiungere qui i miei $ 0,02 sul mio pacchetto ORMLite .

È un sostituto leggero di Hibernate e utilizza le chiamate del database del sistema operativo Android nativo per supportare SQLite su Android. Supporta anche molti altri tipi di database usando JDBC su altre architetture. Abbiamo una mailing list per Android per domande su ORMLite.


1
ORMLite ha il supporto integrato per (uno | molti) -to- (molti | uno) rapporti? Non riesco a trovare molte informazioni al riguardo ... In caso contrario, ci sono piani per questo?
ferdystschenko,

1
Dipende da cosa intendi per "supporto". Esiste un codice di esempio su come usare "oggetti estranei" che spiega come usare uno-a-molti e ci sono esempi su come usare le tabelle di join per realizzare molti-a-molti ( ormlite.com/docs/examples ). Pubblica sull'elenco utenti con ulteriori domande ( groups.google.com/group/ormlite-user ).
Grigio,

7
Sì, è sicuramente più grande di ActiveAndroid. Ovviamente anche molte più funzionalità. Anche freeware rispetto alla licenza di AA. Ma se la dimensione è l'obiettivo, ORMLite non fa per te.
Grigio

4
@Gray Ironic poiché dovrebbe essere "Lite": P
Salman von Abbas

5
Infatti @SalmanPK. Sebbene ci siano vari gradi di lite. :-)
Grey,

66

Questa domanda non può invecchiare ma i quadri suggeriti possono farlo. Quindi, ecco prima un elenco di ciò che trovo importante in tali framework per il confronto:

  • C'è un manufatto Maven o Gradle? (Questo è un grande vantaggio a seconda che tu usi il maven o il gradle, ovviamente)
  • Il codice è accessibile in modo semplice e include una rapida panoramica degli commit per giudicare l'attività? (il codice ospitato su github è sicuramente un vantaggio per me)
  • Gestione delle versioni: ci sono tag di rilascio / rilascio e artefatti per questo? (ce ne sono alcuni che sono ospitati su github e richiedono il clone di git o offrono il tarball principale per il download - per me un grande svantaggio se nemmeno i tag di rilascio sono impostati e indirizzati nel README)
  • per quanto riguarda le dimensioni, ho fornito alcuni suggerimenti su dove era facile passare (non ho scaricato nulla, quindi da quei progetti che non offrono artefatti di rilascio non ci sono dimensioni)

Ed ecco un elenco di quadri con note sui punti sopra. Ho cercato un po 'di più come aBatis e Hadi, ma ho aggiunto solo quelli che avevano qualche attività dopo il 2011.

Non ho provato nessuno di questi, ma forse posso risparmiare un po 'di tempo ai lettori attuali elencando i progetti attivi di oggi. Si prega di aggiungere un commento se si conoscono altri progetti che soddisfano alcuni dei punti di cui sopra e che si stanno verificando seri sviluppi (nel corso del tempo).

EDIT (2013 Nov): aggiornato l'elenco allo stato corrente dei progetti. Alcuni di questi hanno aggiunto tag di rilascio ai loro repository github e supporto Maven / Gradle. Buon lavoro!

EDIT (aprile 2015): aggiornato l'elenco, aggiunti Sprinkles (come da commento di @AndroidGecko) e Realm.io.


Consiglio vivamente di usare Realm, è davvero veloce e fluido da usare!
Crono,

39

Se le prestazioni e le dimensioni del codice sono importanti, controlla greenDAO . Ne sono l'autore e la mia motivazione per creare un altro ORM è stata quella di evitare la riflessione negli hotspot. Si è scoperto che greenDAO può essere fino a 4 volte più veloce di ORMLite. Controlla la pagina delle funzionalità per i dettagli.


5
Sembra abbastanza buono, ma dover generare il Dao è una svolta per me :(
Chris.Jenkins il

4
Sì, la generazione di codice è un ulteriore passaggio per gli sviluppatori, ma consente di risparmiare molte prestazioni nell'app. Sia il bootstrap che l'analisi dei risultati del database sono significativamente più veloci. Altri strumenti si basano sulla riflessione, che è crudelmente lenta in Android.
Markus Junginger,

1
Sto usando GreenDao nei miei progetti e ne sono molto contento.
mabac,

3
@greenrobot hai alcune vetrine di "grandi app" che usano la tua lib?
StErMi,

1
@StErMi Path utilizza greenDAO. Hanno installazioni> 1 M. Vedi github.com/greenrobot/greenDAO/issues/20#issuecomment-13278922
Markus Junginger

10

Non so nulla di esattamente ciò che stai chiedendo, ma esiste un'alternativa a SQLite che potresti trovare utile se i requisiti dell'architettura sono flessibili. Potrebbe valere la pena dare un'occhiata a db4o :


ho avuto buoni risultati con DB40 ... voglio provare Android attivo però ...
Ben

1
activeandroid.com sembra bello, non vedo l'ora di fare un giro
slf

9

ActiveAndroid ($ 20) sembra che potrebbe essere esattamente quello di cui hai bisogno.


14
So che non stai provando niente di sfuggente qui, ma puoi per favore rivelare la tua affiliazione nei tuoi post quando menzioni uno dei tuoi prodotti su SO? So che il tuo nome è nel piè di pagina della pagina collegata, ma stiamo cercando di reprimere l' astroturfing (cosa che non è), quindi chiediamo a tutti di seguire le stesse linee guida di divulgazione. Grazie.
Bill the Lizard,

4
Solo un avvertimento, ActiveAndroid non è gratuito.
Gak,

7
ActiveAndroid è ora gratuito e open-source - pardom.github.com/ActiveAndroid
Michael Pardo,

7

Mi è piaciuto ActiveAndroid. Sembra scritto appositamente per Android. Per me è un vantaggio.

Ho qualche esperienza con Ruby on Rails e se ti piace il modo Rails di ActiveRecord puoi muoverti molto rapidamente con questa libreria.

https://www.activeandroid.com/


Nice framework, ma è in conflitto con la libreria org.codehous.jackson, quindi se lo usi nel tuo progetto non sarai in grado di usare ActveAndroid
endryha

1
Come è in conflitto? L'hai segnalato come bug in tracker.activeandroid.com ?
Michael Pardo,

Forse dai un'occhiata a androrm.the-pixelpla.net ha la maggior parte delle funzionalità e direi anche di più. Inoltre: è gratuito e open source.
Philgiese,


6

Sto anche cercando un ORM su Android. Ho provato ActiveAndroid , NeoDatis e db4o , e penso che userò uno dei due scorso.

NeoDatis e db4o sono davvero simili, quindi vorrei un consiglio per scegliere quello migliore. Qualcuno ne sta usando uno nel suo progetto? Lo userò per un'app gratuita ea pagamento, ma sembra che i due non abbiano alcuna limitazione di licenza per Android.

C'è un benchmark qui che sembra dire che NeoDatis è più veloce di db4o, ma non so se possiamo basare la mia opinione su questo.


Db40 e NeoDatis sono database di oggetti, solo le dimensioni di questi sono totalmente proibitive per qualsiasi uso su Android
Bostone,

@ DroidIn.net potresti fornire un link a sostegno del tuo commento?
Sergio,


2

ActiveRecordJS di Aptana è un ORM Javascript che dovrebbe essere eseguito su gPhone. È progettato per funzionare con Jaxer e Gears. Quando si utilizzano gli adattatori Jaxer, è possibile connettersi a SQLLite.

AGGIORNAMENTO: Non credo di averlo chiarito, ma ActiveRecordJS è un ORM che gestisce il lato client, il che potrebbe essere un vantaggio per te su gPhone.


Nel codice Java? O nel codice JavaScript?
GWLlosa,

Sono abbastanza sicuro che stai parlando di una soluzione Javascript destinata esclusivamente alle applicazioni basate su browser (Web). Non vedo come si collega allo sviluppo di app native per Android.
Brian Lacy,


1

Ho sviluppato la mia implementazione di JPA ORM per Android. Non è ancora completamente completo, ma è possibile annotare la classe con le annotazioni @Entity, @Id, @Column e si ottengono entità JPA che possono essere archiviate e recuperate dal database SQLite. Ha bisogno di altre funzionalità e di pulizia prima di pubblicarlo, ma se c'è abbastanza interesse potrebbe accelerare il mio sforzo.


Sembra interessante, hai già il s.th. dare un'occhiata / provare? Saluti, Martin
MartinGrotzke

Più di un anno dopo, come sono i progressi in questo? JPA + Annotations su Android sembra GRANDE!
Spidey,



0

Esperienza negativa con db4o (v. 8): l'indicizzazione non ha funzionato correttamente (eccezione ecc.). Quindi non sono riuscito a evitare la creazione di duplicati in tabelle esterne quando si hanno oggetti nella struttura degli oggetti. Spiegazione più dettagliata nella mia domanda . Spero che un giorno sarebbe meglio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.