最初接觸Realm這個數(shù)據(jù)庫是因為在用Sqlite的時候撕贞,沒有用到其他第三方的ORM更耻,所以一直是自己寫的DBHelper,和DAO的SQL語句捏膨,每一個表都要建立一個DAO秧均,里面各種的增刪改查語句,封裝的好倒是還行号涯,封裝的不好使用的時候著實令人頭疼目胡。
然后就是被Realm的直接對對象進行操作的方式被吸引到了。查詢語句寫起來非常簡單链快,就是一個鏈式調(diào)用誉己,非常符合流式api的編程習慣。新增修改域蜗,也非常簡單巨双,只需要在Realm的事務中,對RealmObject進行本身的set方法霉祸,就能保存了筑累。開始的時候確實用的非常的爽,但是慢慢的丝蹭,問題也隨之而來了慢宗。
首先,我們用于需要保存到數(shù)據(jù)庫的實體類必須繼承自RealmObject,這樣一來我們的實體類局限性就非常的大了婆廊。一般請求接口返回的字段都有些code迅细,data,message這樣每個接口都帶的淘邻,我們可以抽出來一個基類茵典,實體類中就只剩下真正需要的字段了,看起來會非常的清晰宾舅。
然后必須提供field的getter和setter统阿,而且還不能定義除此之外的其他方法,像是equals(),toString(),等方法通通不行筹我,連如果你要定義一個帶變量的構(gòu)造方法了扶平,你還要提供一個空的構(gòu)造方法。field的類型也有限制蔬蕊,據(jù)我使用结澄,像List Set Map都是不行的,List可以用RealmList代替岸夯。限制非常的大麻献。這還了得,連android的Parcelable都實現(xiàn)不了了猜扮。你要想實現(xiàn)序列化勉吻,要么實現(xiàn)Serializable,要么映射到另外實現(xiàn)了序列化接口的實體類旅赢,還要建立一套另外的POJO類睹耐,非常的麻煩蜈亩。
使用Realm查詢語句沧竟,查詢出來的對象远舅,不能進行修改操作,因為為了保證數(shù)據(jù)的同步性僵控,你只能CopyFromRealm出來一份進行操作踩娘,比如,你查詢出來的Arrays,設置給了listview的adapter喉祭,謹慎养渴,可能你會對adapter進行notfacation的操作,就會報錯泛烙。接著你如果要對查詢出來的結(jié)果進行修改理卑,必須在他的transaction中完成。
最后蔽氨,不知道是不是確實有這個問題藐唠,在我使用Gson來對對象數(shù)組進行json化的時候帆疟,繼承RealmObject的數(shù)組就會出錯,最后我采用了FastJson來對對象數(shù)組進行了json化宇立。