Android ORM DB使用心得
2015-09-01 05:15
405 查看
Android ORM DB使用心得
前言
ORM( Object Relational Mapping ),透過直接操作物件的方式就能夠對DB執行新增、修改、刪除、搜尋的功能,大大簡化RD在開發過程中繁瑣的工作。
使用心得
目前使用過下列幾種Github上熱門的專案– greenDAO 過程太過繁瑣我就不介紹了
– sugar Github上雖然一直有更新,但都沒有真正釋出,文件也是…
– LitePal 推薦!非常簡單,步驟不超過五步
– realm-java 推薦!官網支援非常完整,文件也算相當清楚
結論:小資料、單筆資料,建議用LitePal,大量資料再用realm-java
LitePal
Github連結
由於官網已經有相當完整的介紹,就不在贅述,這專案的好處是就算資料結構有所變動也不需要去作所謂的Migrations,而且可以跟Gson完美結合
LitePal物件上面需要繼承 DataSupport
//新增 Album album = new Album(); album.setName("album"); album.setPrice(10.99f); album.save(); //修改 Album albumToUpdate = new Album(); albumToUpdate.setPrice(20.99f); // 改價格 albumToUpdate.update(指定id); //刪除 DataSupport.delete(Album.class, 指定id); //查詢 Album album = DataSupport.find(Album.class, 指定id); List<Album> allAlbums = DataSupport.findAll(Album.class); List<Album> albums = DataSupport.where("name like ?", "album%").order("duration").find(Album.class);
realm-java
官網realm-java 雖然步驟稍嫌複雜,如果資料架構有變動需要Migrations,但其速度卻是非常快速,對於有大量資料要處理的來說可以是真心推薦,而且有支援直接JSON轉入,非常方便!
realm物件上面需要繼承 RealmObject,並提供 Tag 避免不要的型態進入DB當中
public class User extends RealmObject { private String name; private int age; @Ignore private int sessionId; // Standard getters & setters generated by your IDE… public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getSessionId() { return sessionId; } public void setSessionId(int dontPersist) { this.sessionId = sessionId; } }
realm對於boolean的變數方法要求有點奇怪,必須強制使用get 跟set 而不是 is 跟 set
//啟動DB Realm realm = Realm.getInstance(this); //開始 realm.beginTransaction(); //... 這邊可以執行新增資料或者更新資料 ... //commit realm.commitTransaction(); //結束 官方建議如果不使用DB了就一定要關掉,避免記憶體浪費 realm.close();
新增
//直接新增 realm.beginTransaction(); User user = realm.createObject(User.class); // Create a new object user.setName("John"); user.setEmail("john@corporation.com"); realm.commitTransaction(); //事後新增 User user = new User("John"); user.setEmail("john@corporation.com"); // Copy the object to Realm. Any further changes must happen on realmUser realm.beginTransaction(); User realmUser = realm.copyToRealm(user); realm.commitTransaction();
查詢
// Build the query looking at all users: RealmQuery<User> query = realm.where(User.class); // Add query conditions: query.equalTo("name", "John"); query.or().equalTo("name", "Peter"); // Execute the query: RealmResults<User> result = query.findAll(); // Or alternatively do the same all at once (the "Fluent interface"): RealmResults<User> result2 = realm.where(User.class) .equalTo("name", "John") .or() .equalTo("name", "Peter") .findAll();
修改
RealmResults<User> result = query.findAll(); User user = result.get(0); user.setName("Omima"); realm.commitTransaction();
刪除
// All changes to data must happen in a transaction realm.beginTransaction(); // remove single match result.remove(0); result.removeLast(); // remove a single object User user = result.get(5); user.removeFromRealm(); // Delete all matches result.clear(); realm.commitTransaction()
相关文章推荐
- Android NDK开发(八)——应用监听自身卸载,弹出用户反馈调查
- Android系统缓存相关
- android studio下的NDK开发详解(一)
- Android简单自定义标题栏
- android SDK manager 无法获取更新版本列表
- Android Spinner
- Android中AsyncTask的依赖执行用法
- Android开发环境的建立
- Android Low Memory 测试工具 Eat Memory
- Android各种View的下拉刷新与加载更多
- android-wheel三级联动
- Android Api Demos登顶之路(五十四)Service LocalService Binding
- 如何获取到Android控件的高度
- Android 如何让EditText不自动获取焦点
- android:gravity和android:layout_Gravity的区别
- android中toast使用注意事
- Android-实现汉字转拼音支持一词多音
- 无线安全Android小工具
- 第一次启动AVD失败了
- Android的内部存储和外部存储