Jakiego ORM'a używa się w komercyjnych projektach ? Który jest najbardziej popularny ?
A może w ogóle się nie używa i baza danych w takich projektach jest natywna ?
Polecam Room. W oficjalnej dokumentacji SQLite Androidowego do niego odsyłają.
Z ORMów to chyba OrmLite i GreenDao. W sumie nie wiem, bo nigdy nie korzystałem z ORMów na poważnie w Androidzie, bo są kiepskimi rozwiązaniami na tę platformę.
Najbardziej lubię SqlDelight ewentualnie Room, ale należy pamiętać, że to nie są ORMy.
Są jeszcze alternatywy nie SQLowe jak Realm i ObjectBox, ale nie polecam.
Dlaczego ORM'y są kiepskim rozwiązaniem na tę platformę ? Wszystkim zajmuje się biblioteka i mamy mniej syfu w kodzie. Implementacja operacji na bazie danych jest znacznie szybszy i jest mniej błędów, nie trzeba się niczym martwić.
Na Androidzie ORMy są nienajlepsze, bo relacje między obiektami są dociągane najczęściej leniwie. Idea sama w sobie nie jest zła, ale nie pasuje do modelu wątkowości na Androidzie. Powiedzmy, że masz klasę User
, która ma w sobie pole Collection<User> friends
i chcesz to wyświetlić np. w RecyclerView
. Kolekcja zostanie pobrana dopiero w momencie gdy zapyta o nią główny wątek. Teraz jeżeli tych przyjaciół trochę jest, to ekran zacznie przycinać. Biorąc pod uwagę, że zazwyczaj wyświetla się listę wszystkich użytkowników z np. ilością przyjaciół, to zrobi się to bardzo toporne przy przewijaniu ekranu.
Najlepiej w takim wypadku mieć osobnę klasę UserWithFriends
, która już dociągnie wszystko co trzeba w momencie tworzenia. Tylko wtedy z ORMem trzeba się bawić w mapowania itd. OM daje Ci to z buta w momencie budowania zapytań.
Pomijając specyfikę Androida, to ORMów nie lubię z kilku innych powodów.
- Zapytania są "stringly typed" i o błędach dowiesz się dopiero w trakcie działania programu a nie w momencie kompliacji.
- Nie można wykorzystać do końca wiedzy z SQLa, bo każdy ORM radzi sobie inaczej z tworzeniem zapytań.
- Klasy muszą być zazwyczaj mutowalne.
- Wymagana jest anotacjofilia do konfiguracji klas. Tutaj
Room
też nie daje rady niestety, ale o problemach dowiadujesz się albo przy pisaniu kodu albo przy kompilacji, więc tragedii nie ma.