Mai mult de un an în urmă am scris un articol "Revizuirea celor mai bune AndroidORM - ActiveAndroid". Voi continua să folosesc acest minunat ORM, dacă câteva:
2) Imposibilitatea testării unității (aruncă o excepție) și incapacitatea de ao repara (vezi punctul 1)
3) Probleme cu noile versiuni de Android
4) Buguri pe care nu le-am observat și care pot ieși mai târziu, când este prea târziu
În legătură cu acestea, am decis să schimb ORM la ceva mai proaspăt și mai bun. Am fost sfătuit de multe biblioteci diferite, dar încă nu am putut decide "cel mai bun". Inițial, alegerea mea a căzut pe squidb. dar a trebuit, de asemenea, să fie abandonată din cauza complexității utilizării sale. Da, și nu-mi place generarea de coduri. În cele din urmă, am găsit chiar biblioteca de care aveam nevoie - DBFlow.
O privire generală mică
Una dintre problemele cu ORM-bibliotecile existente este că acestea sunt folosind Java-reflexie pentru a determina modele de baze de date, tabele, grafice și relații coloane. DBFlow este una dintre puținele biblioteci pe care se bazează exclusiv pe prelucrarea adnotări pentru a crea un Java cod bazat pe baza SQLiteOpenHelper. Această abordare conduce la o creștere a productivității în timpul execuției, și, în același timp, elimină necesitatea de a scrie o mulțime de cod de șabloane, este de obicei necesar pentru a descrie tabele, efectua interogări, și așa mai departe. D.
Conectarea Bibliotecii
Primul pas este să conectați pluginul apt. prin scrierea următoarelor linii în fișierul rădăcină build.gradle a proiectului dvs.:
De asemenea, trebuie să înregistrăm depozitul jitpack.io în bloc cu allprojects -> repositories:
Apoi, în fișierul app / build.gradle, activați pluginul android-apt și adăugați DBFlow în lista de dependență. Vom crea o variabilă separată pentru a stoca numărul versiunii, astfel încât să poată fi schimbată mai ușor în viitor:
Crearea unei baze de date
Definirea tabelelor
Clasele Java care funcționează ca modele trebuie să fie moștenite de la BaseModel. În plus, în adnotare trebuie să specificăm baza de date la care face parte tabelul. Aici vom arăta cum să creați tabele pentru organizații și utilizatori:
Putem foarte ușor să conectăm modele folosind adnotarea ForeignKey. Valoarea saveForeignKeyModel înseamnă actualizarea cheii externe la actualizarea înregistrării. În acest caz, dezactivați această funcție:
Utilizând biblioteca Parceler
Dacă folosiți biblioteca Parceler cu DBFlow. adăugați adnotarea @ parcel (analyze =) la clasa vaccinului. În caz contrar, Parceler biblioteca va încerca să serializam un domeniu legat de BaseModel de clasă și va eșua Eroare: Parceler: Nu se poate găsi citi Generator / scriere pentru tipul. Pentru a evita această problemă, trebuie să specificați ce clasă din lanțul moștenirii ar trebui examinată:
Inițializarea DBFlow
Apoi, trebuie să inițializăm DBFlow în clasa Application:
Schimbați clasa aplicației în fișierul AndroidManifest.xml:
Crearea de înregistrări
Pentru a salva o înregistrare într-o masă, trebuie pur și simplu să sunăm metoda .save ():
Citirea înregistrărilor
Citirea înregistrărilor este, de asemenea, foarte ușoară:
Actualizarea înregistrărilor
Amintirea metodei save () a obiectului va actualiza intrarea cu cheia primară.
Ștergerea înregistrărilor
Pentru a șterge o intrare, trebuie să sunăm metoda delete ():
Executarea Tranzacțiilor
De asemenea, puteți introduce un grup de elemente în tabel utilizând clasa ProcessModelTransaction:
Migrarea bazelor de date
Migrările sunt determinate prin crearea unei clase de migrare sau prin plasarea unui fișier SQL valid în folderul assets / migrations // al proiectului dvs. Următoarea este un exemplu de clasă de migrare:
Remedierea erorilor
Modelul nu a fost găsit
Din moment ce DBFlow este necesar să se ocupe de adnotări, poate fi necesar să faceți clic pe Build -> New Project pentru a genera codul sursă.
Utilizați cu GSON
Dacă intenționați să utilizați DBFlow cu biblioteca Gson. Puteți obține excepția StackOverflowError atunci când încercați să utilizați obiecte Java. care sunt moștenite de la BaseModel. Pentru a evita aceste probleme. trebuie să excludeți clasa ModelAdapter. care este un domeniu din clasa BaseModel:
Apoi trebuie să creați un Gson Builder personalizat pentru a exclude această clasă:
Du-te aici pentru mai multe informații.
Biblioteca pe GitHub: DBFlow