ãã®ãã¹ãã¯ããããç§èªèº«ã®èå³ã®ããã«å®æœãããŸããã ãªããªã å€ãã®ORMãããããããã¯ãã¹ãŠç°ãªã£ãŠããŸããæ¢åã®ã·ã¹ãã ã«ã€ããŠå®¢èŠ³çãªèŠæ¹ãããããšæããŸãã
åºæ¬ã¯AndroidDatabaseLibraryComparisonãªããžããªã§ãã ãªãªãžãã«èšäºã¯ãã¡ãã§ãã ã芧ã®ãšãããèè ã¯æåã«GreenDaoãã¬ãã¥ãŒã«å«ããªãããã«ããŸãããäœåºŠãå°ãããããšãã圌ã¯ãŸã£ããééã£ãèšå®ã§ããããªã³ã«ããŸããã
ãããšã¯å¥ã«ãã»ãšãã©ã®ORMã¯ãŸã æ¬æ Œçã§ã¯ãªããã¢ãããŒã·ã§ã³ãåå¥ã®ãµãã¯ãšãªã䜿çšããã«ãã¹ããããã³ã¬ã¯ã·ã§ã³ãæã€ãªããžã§ã¯ãã®æžã蟌ã¿ãšèªã¿åãããµããŒãããã©ã€ãã©ãªã¯ã»ãšãã©ãããŸããã
ãã¹ãæ¹æ³
2ã€ã®ã¢ãã«ããã¹ããããŸããã ã·ã³ãã«ããããã ããžã§ ïŒ
ã·ã³ãã«
public class SimpleAddressItem{ String name; String address; String city; String state; long phone; }
åçŽåãç·åœ¢æ§é ã ãã®ãªããžã§ã¯ãã¯10,000ã³ããŒã§äœæãããã³ããŒã¯ã³ã¬ã¯ã·ã§ã³ã«é 眮ãããã³ã¬ã¯ã·ã§ã³ã¯ORMã䜿çšããŠããŒã¿ããŒã¹ã«ä¿åãããŸããã ããã¯6åç¹°ãè¿ãããŸããã
èªã¿åã段éã§ã¯ãã³ã¬ã¯ã·ã§ã³ãèªã¿åãããèªã¿åããã£ãŒã«ãã調æŽãããŠãæåã«ããŒã¿ã®æžã蟌ã¿ãšèªã¿åããå¶åŸ¡ããã2çªç®ã«ããªãããŒãªé 延èªã¿åããåé¿ãããŸããã èªã¿åãããšã«ãã¢ããªã±ãŒã·ã§ã³ã¯ã¿ã¹ã¯ãããŒãžã£ãŒã«ãã£ãŠéããããåã³èµ·åãããŸããã å®éãRealmãDBFlowãGreenDaoãªã©ã®äžéšã®ORMã«ã¯ç¬èªã®ãã£ãã·ã¥ããããŸãã ãŸããèšé²çŽåŸããŸãã¯é£ç¶ããŠ2åã«ãŠã³ããããšããã£ãã·ã¥ã§èªã¿åããã»ãŒç¬æã«çºçããå šäœã®çµæãããããããŸãã ã¯ããããã¯å©ç¹ãšèŠãªãããšãã§ããORMãéžæãããšãã«èæ ®ããå¿ èŠããããŸãã
æŽç·Žãããã¢ãã«ã ãã¹ãããããªã¹ããæã€ãªããžã§ã¯ãïŒ
é£ãã
public class AddressBook{ Long id; String name; String author; Collection<AddressItem> addresses; Collection<Contact> contacts; } public class AddressItem extends SimpleAddressItem { AddressBook addressBook; } public class Contact{ String name; String email; AddressBook addressBook; }
ãªããžã§ã¯ãã¯50ã³ããŒã§äœæãããŸããã ãã¹ããããåã³ã¬ã¯ã·ã§ã³ã50ã³ããŒã§åããããŸããã èšé²æžã¿ã èªã¿åãæã«ãããŒã¿ã®æ£ç¢ºæ§ããã§ãã¯ãããŸããã
ãŸããåãã¹ãã¯6åå®è¡ãããŸããã çµæã®ã°ã©ãã§ã¯ãåã®æ°ã¯ã©ã³ã¿ã€ã ã®å¹³åå€ã§ãã
çµæ
ããããã®åçãããã®ã§ããã¿ãã¬ã®äžã§ïŒ
çµæ
ã·ã³ãã«ãªã¢ãã«ã èšé²ïŒ
ã·ã³ãã«ãªã¢ãã«ã èªæžïŒ
ã·ã³ãã«ãªã¢ãã«ã Sugar ORMã䜿çšããªãèªæžïŒ
æŽç·Žãããã¢ãã«ã èšé²ïŒ
æŽç·Žãããã¢ãã«ã èªæžïŒ
æŽç·Žãããã¢ãã«ã Sugar ORMã䜿çšããªãèªæžïŒ

ã·ã³ãã«ãªã¢ãã«ã èªæžïŒ

ã·ã³ãã«ãªã¢ãã«ã Sugar ORMã䜿çšããªãèªæžïŒ

æŽç·Žãããã¢ãã«ã èšé²ïŒ

æŽç·Žãããã¢ãã«ã èªæžïŒ

æŽç·Žãããã¢ãã«ã Sugar ORMã䜿çšããªãèªæžïŒ

ãã¹ãåå è
1. ã¬ã«ã
æ¬åœã«éãã 確ãã«ãå Žåã«ãã£ãŠã¯çŽç²ãªSQLiteãããé«éã§ãïŒSQLã¯åçŽãªãã©ããã¢ã«ãŽãªãºã ã䜿çšããŠããããšã«æ³šæããå¿ èŠããããŸããèããŠã¿ããšãLEFT JOINã䜿çšããŠããŒã¿ããŒã¹ãžã®åŒã³åºãåæ°ãæžããããšãã§ããŸãããããã«ã€ããŠèããå¿ èŠããããŸãããåžæã®å Žå-ããããïŒã 匷調ãã¹ãããšã¯å®è£ ãéåžžã«ç°¡åã§ãã çŽæçã 倧ããªå©ç¹ã¯ãã¬ã«ã ãæ¬æ ŒçãªORMã§ããããšã§ãã ã€ãŸã ãªããžã§ã¯ããä¿åãã/ãªããžã§ã¯ããèªãïŒå éšã³ã¬ã¯ã·ã§ã³ããããã®é¢ä¿ã«ã€ããŠèããå¿ èŠã¯ãããŸãããã¯ã¬ã€ãžãŒãªãForeign ...ãããOne-to-many ...ãããŒãªã©ã®ãã€ã¹ãã泚éããå¿ èŠã¯ãããŸããã ãã¹ãŠãããã¯ã¹ã§æ©èœããŸãã
ããããæ¬ ç¹ããããŸãã ããã§ããã³ã³ãœãŒã«ã«ã¢ã»ã³ãã©ãŒã¹ã¿ãã¯ããããšå¥åŠãªã¯ã©ãã·ã¥ãçºçããŸãã ã¯ãããããã¯éåžžã«ãŸãã§ããããããŸãã ãã¹ãŠã®ãã£ãŒã«ãã¯ãã©ã€ããŒãã§ãªããã°ãªãããåãã£ãŒã«ãã«ã¯ç©ºã®ã³ã³ã¹ãã©ã¯ã¿ãŒãšã²ãã¿ãŒ+ã»ãã¿ãŒãå¿ èŠã§ãã ãã¡ãããLombokã®ãµããŒãã¯ææ°ããŒãžã§ã³ã«ç»å ŽããŸããããããã¯ãŸã +1ã©ã€ãã©ãªã§ããããããžã§ã¯ããžã®+1ãã©ã°ã€ã³ã§ãã ãã¡ãããLombokã䜿çšããªãå Žåãããã¯Android Studioã®3ã€ã®ã·ã§ãŒãã«ããã§è¡ãããŸãããããã¯ãããžã§ã¯ãã®ãã€ã©ãŒãã¬ãŒãã³ãŒãã®æã§ãã ãµã€ãºãšããã°ãRealmãæ¥ç¶ããããã ãã«APKã«+5ã¡ã¬ãã€ãã
ãããžã§ã¯ããåããŠã¢ã»ã³ãã«ããåã«ãååšããªãã³ã³ãã€ã«æã®ã¯ã©ã¹ãèæ ®ããå¿ èŠããããŸãã Parcelerã®é£ãããRealmResultãšRealmObjectã®éããrealm.closeïŒïŒã®åŸã«ãªããžã§ã¯ããèªã¿åãããšãã§ããªãã RealmList / RealmResultã³ã¬ã¯ã·ã§ã³ã¯ãListããç¶æ¿ãããŸãããaddAllãindexOfãtoArrayãªã©ã®å€ãã®åºæ¬çãªã¡ãœããããµããŒãããŸããã ããã¯ãã¹ãŠè¿œå ã®åé¡ãè¿œå ããŸãã ãã¡ãã解決ã§ããŸããããããžã§ã¯ãã®è€éããå¢ããŠããããããããèæ ®ã«å ¥ããå¿ èŠããããŸãã
äžè¬ã«ãRealmã§ã®äœæ¥ã¯çŽ æŽãããããšã§ãã ããã«ãåªããããã¥ã¡ã³ããã»ãŒãã¹ãŠã®åé¡ã¯å ¬åŒWebãµã€ããèªãããšã§è§£æ±ºã§ããŸãã
2. OrmLite
éåžžã«å€ã確ç«ãããORMã 1ã€ã®åé¡ïŒæåŸã®ãªãªãŒã¹ã¯3幎åã§ããã æ代é ãã®å€ãã ã¢ãããŒãèªäœã¯å€ããªã£ãŠããŸãã 2016幎ã«ã³ã³ãã€ã«æã®æ³šéã䜿çšããã³ãŒãçæïŒ ããã«çå£ã«åå ãããã§ããïŒ äžè¬çã«ãããã¯éåžžã®å¹³åãšããŠè¡šç€ºãããŸãã ã©ãã5-6mã®å Žæã§ã¯ãããŸããã å¯äžã®äŸ¿å©ãªæ©èœïŒèŠªãèªã¿åããšãã«ããã¹ããããã³ã¬ã¯ã·ã§ã³ãèªåçã«èªã¿åãã ã¬ã«ã ã®ããã«ã é ãã ãã§ãã ããããä»ã®ORMã¯ããã§ã¯ãããŸããã
3. GreenDao
SQLiteçšã®è¶ é«éAndroid ORMã ããã¯å ¬åŒãŠã§ããµã€ãã«èšèŒãããŠããŸãã ãããŠåœŒã¯æ¬åœã«è¶ é«éã§ãã æã«ã¯ã¬ã«ã ãããé«éã§ãã ããããåã³ãã³ãŒãçæã è¿œå ã®ã³ãã³ãã䜿çšããŠãå¥ã®ãããžã§ã¯ãã§ããŒã¿ããŒã¹ãäœæãããããã³ã³ãã€ã«ããå¿ èŠããããŸããããããŠåããŠãäœæ¥ã§ããã¯ã©ã¹ãã§ããŸãã çæãããã¯ã©ã¹ã¯å€æŽã§ããŸãããç¹å¥ãªã³ã¡ã³ããå«ããªãå Žåãåçæäžã«æ°ããæ¹æ³ã§ãã¹ãŠäœæãããããšã«æ³šæããŠãã ããã ã©ã€ãã©ãªèªäœã¯é«éã§å°ããã§ãã ãã®ããããã©ã¹ãšãã€ãã¹ããããŸãã 䜿çšãããã©ãã-ããªãã決ããã
4. DBFlow
ãã1ã€ã®ãæ°ã«å ¥ãã¯é床ã§ãïŒãã ãã䟿å®äžã§ã¯ãããŸããïŒã èè ã䞻匵ããããã«ãéåžžã«é«é-æéã®Android ORMããŒã¿ããŒã¹ã©ã€ãã©ãªãŒã§ãããããã§ã¯ãããŸããã 泚éåŠçãã€ãŸã ã³ã³ãã€ã«äžã®ã³ãŒãçæã ãã®çµæãããšãã°ãsaveïŒïŒã¯æé«ã®ããã©ãŒãã³ã¹ãæäŸããsql compileStatementã³ãã³ãã«å€ãããŸãã ãã¡ãããå·¥å Žãåå°ã§é床ãäœäžããŸããé床ããªããã°é床ã¯äœäžããŸãã çµæã®ãã£ãã·ã¥ããµããŒãããŠããããããã£ãã·ã¥ããããŒã¿ãã»ãŒç¬æã«ååŸã§ããŸãã
ããããæ¬ ç¹ããããŸããã©ã€ãã©ãªãéçºäžã§ãããçŸåšã®ãªãªãŒã¹ã§ã¯ã3çªç®ã®ããŒã¿ããŒãžã§ã³ã¯2çªç®ãšäºææ§ããããŸããã 2çªç®ã®ããã€ãã®äŸã®å ¬åŒææžã®ååã¯ãå ¬åŒææžãäžå®å šã§ãããå Žåã«ãã£ãŠã¯ãšã©ãŒããããŸãã ã°ãªããã¯ãæãäºæããªãå Žæã§çºçããŸãã ããšãã°ãã¯ã©ã¹ã倧æåã§é 眮ãããŠããpakageãšããååãä»ããå Žåããããžã§ã¯ãã¯ã³ã³ãã€ã«ãããŸããã ãããŠãããªãã¯ãã®çç±ããç¥ããªãã§ãããã éåžžã®ããã¹ããšã©ãŒã¯ãããŸããã 移è¡ã®åé¡ã ãã¶ããããªãããã£ãšé·ã座ã£ãŠããã°ãäœããããŸããããããããŸããããäŸã«ãã£ãŠãã¹ãŠãããŸããããç§ã®ç§»è¡ã¯ããŸããããŸããã§ããã éåžžããã®ã©ã€ãã©ãªãéåžžã©ãã䜿çšããã«ã¯ãå€ãã®å·¥æ°ãè²»ããå¿ èŠããããŸãã ããããã©ããŸã§è¡ãããšããäŸã¯ãããŸãããèè èªèº«ã¯ãã®ãã¹ãã«äŸãæã£ãŠããŸããã§ããã
5. é£åšæ£
ã·ã³ãã«ã§ãããã»ã©é ãã¯ãªããæã«ã¯é«éã§ãã 泚éããªããŠãæ©èœããŸãïŒ ããããåœç¶ã®ããšãªãããããããçš®é¡ã®@IgnoreãIndexãããããŸã ã å¯äžã®åé¡ã¯ããªããžã§ã¯ãããã§ã¯ãªããããŒã¿ããŒã¹ããæ©èœããããšã§ãã ã€ãŸã ãªããžã§ã¯ããèšé²ããã«ã¯ã次ã®æäœãè¡ãå¿ èŠããããŸãã
CupboardDatabase database = new CupboardDatabase(context); SQLiteDatabase db = database.getWritableDatabase(); DatabaseCompartment dbc = cupboard().withDatabase(db); dbc.put(addresses);
ããã¯å¿ ããã䟿å©ã§ã¯ãããŸããã ããã«ããªããžã§ã¯ãããšã«Long _idãã£ãŒã«ããå¿ èŠã§ãã
6. æ¯ãããã
ã©ã€ãã©ãªã¯ç§ã«ãã£ãŠã¬ãã¥ãŒã«è¿œå ãããŸããã§ããããæ¬ èœããŠãããã¹ããå®äºããŸããã ã©ã€ãã©ãªã¯ã²ã©ãã§ãã ã²ã©ãã ã°ã©ããèŠãŠãã ããã çç±ãç¥ã£ãŠããŸããïŒ èè ã¯ããŒã¿ããŒã¹ã®ãã¹ãŠã®ã¬ã³ãŒãã«å¯ŸããŠãSELECT * FROMïŒ s WHEREïŒ s LIMIT 1ããå®è¡ããããã§ãïŒ ã¯ããã¯ãã ãããã®äœæè ã¯ããINSERT OR REPLACEãããšãã¥ã¬ãŒãããŸãã ãããŠãããªãã«ã¯éžæè¢ããããŸããã SaveïŒïŒã®ã¿ããããããã§çµããã§ãã èªã¿åãã¯ãsqlã«å¯ŸããåçŽãªã©ãããŒã§ãïŒQuery.manyïŒAddressItem.classã "select * from AddressItem where addressBook =ïŒ"ãString.valueOfïŒidïŒïŒãGetïŒïŒãAsListïŒïŒã ORMã§ããïŒ ããïŒ ããŒã¹ãäœæããã¡ã«ããºã ã¯ãŸã£ãããããŸããã ãCREATE TABLEããæåã§äœæããŸãã
7. ActiveAndroid
ãŸããç§ã¯äœãèšãããšãã§ããŸãã ã¡ãªããã®ãªãåãªãORMã é床ãåãã§ãã
8. Ollie
å¥ã®ã³ã³ãã€ã«æORMã å šäœçã«ããªãæ©æã§ãã å©ç¹/æ¬ ç¹ã«ã€ããŠã¯äœãèšããŸãã ããŸããããŸããã§ããã
9. ã·ã¥ã¬ãŒORM
ã·ã³ãã«ã§æé ãªäŸ¡æ Œã§ãããéåžžã«é ãã§ãã 泚éã®å®è¡æã®èªã¿åãã«ããåå°ã®åæ ã«ãããäœæ¥ãéåžžã«é ããªããŸãã æè¿ãŸã§ã圌ã¯ããŒã¿ããŒã¹ã®åãšã³ããªã«ãLog.iïŒSUGARãobject.getClassïŒïŒãGetSimpleNameïŒïŒ+ãsavedïŒ "+ idïŒ;"ãšæžããŠããŸããã ãã®è¡ãåé€ãããšãæžã蟌ã¿é床ã2åã«ãªãããšããããŸãïŒ èè ã¯ãåçŽåã®ããã«ããã©ãŒãã³ã¹ãå¿é ããŠããªãããã§ãã ããããåçŽãã§ããã¹ãŠãæŽç¶ãšããŠããŸãïŒæå°éã®æ³šéãåçŽãªä¿åïŒïŒãæ€çŽ¢ïŒïŒãããã誰ãããªããé©ãããŸããïŒ
10. SQLliteã
ããã§ã¯ãæé«é床ãç®æããçŽç²ãªSQLã«ã€ããŠèª¬æããŠããŸãã ãããã¯ããcompileStatementããšbindStringïŒiãvalueïŒãã¯ããã¯ããååã§ã¯ãªãã€ã³ããã¯ã¹ã§ãã ContentValuesããããŸããã ç§ã®ã·ããã§ã¯ãããŸããïŒ
SQLlistã¯ç¢ºãã«ãã»ãšãã©åžžã«ãªãŒããŒã§ããæãçŽç²ãªåœ¢åŒã§ãã å¯äžã®äŸå€ã¯è€éãªèªã¿åãæäœã®é åã§ãããããããnosqlããŒã¿ããŒã¹æ§é ã«éç¥ããŸãã ããããåè¿°ããããã«ãããã¯æé©åã§ãããšç¢ºä¿¡ããŠããŸãã
誰ããæåã®ã°ã©ãã®ãSQLite 50xãåã®æå³ãå°ããŸããïŒ ããŒã¿ããŒã¹ãžã®åæ¿å ¥ã50åã®ãªããžã§ã¯ãã«ãã£ãŠè¡ãããå Žåãããã¯è€æ°è¡ã®ã¬ã³ãŒãã§ãã
INSERT INTO table VALUESïŒïŒ1 ,? 2 ,? 3ïŒãVALUESïŒïŒ4 ,? 5 ,? 6ïŒãVALUESïŒïŒ7 ,? 8 ,? 9ïŒ...
ããã¯ã³ãŒããéåžžã«è€éã«ãããããåçŽãªãã¹ãã®ããã«äœæããŸããã githubãããžã§ã¯ãã§ã¯ããã®ã³ãŒãã¯ã³ã¡ã³ãåãããŠããŸãã
çŽç²ãªSQLã§ã¯ãã€ã³ããã¯ã¹ã®å¹æãç¹ã«é¡èã§ãããã€ã³ããã¯ã¹ä»ãããŒãã«ãžã®æžã蟌ã¿ãã©ã®ããã«é ããªããèªã¿åããã©ã®ããã«å éãããããããããŸãã ãŸãããããã¯äžè¬çãªçå®ã§ããã誰ããã¿ã¹ã¯ã®ã€ã³ããã¯ã¹ã®äœ¿çšãéžæããå¿ èŠããããŸãã
ãããã«
ãã¡ããããã¹ãã¯å®å šã§ã¯ãããŸããã 確ãã«ãã©ã³ãã èªã¿åãã®é床ã¯èæ ®ãããŸããã ORMã®åæåé床ã®ãã¹ãããããŸããã ORMã©ãããŒèªäœãäœæããŠãããããŒã¿ããŒã¹ã䜿çšããæºåãæŽããŸã§ã®æéã Snappy-DBã®ãããªNoSQLããããå®éã®åäœãèŠããšèå³æ·±ãã§ãããã requeryã®ãããªæ°ããORMããããŸããããããã«ã€ããŠã¯ã»ãšãã©ç¥ãããŠããŸãããããããã®ã¹ããŒãã¡ã³ãã¯çžå€ããã倧é³éã§ãïŒRxJavaãµããŒããç¡åå°ãªã©ïŒã
ããã«ã¯æéãããããŸããå¿ èŠã«å¿ããŠããããžã§ã¯ãã³ãŒããéããŠãã ããïŒ github.com/Rexee/AndroidDatabaseLibraryComparison