前言
集成GreenDao查詢官網可以看到一則通告:對於新應用程序,我們建議使用ObjectBox,這是一個新的面向對象的數據庫,它比SQLite快得多並且易於使用。對於基於greenDAO的現有應用程序,我們提供了DaoCompat,可輕松切換(另請參見公告)。
於是,本篇便對比GreenDao寫一個ObjectBox的簡單使用說明,對比GreenDao集成起來更加容易,使用也比較簡單。
介紹
ObjectBox數據庫是用於對象的超快速輕量級數據庫,由greenrobot團隊開發,與GreenDao,EventBus等師出同門。
從 greenDAO 遷移到 ObjectBox 提供了各種優勢:
- 更快: ObjectBox 比 SQLite 快10倍(檢查這個開源基准應用程序)
- 強大的關系支持: ObjectBox 提供了更改跟蹤、級聯放置和靈活的加載策略(渴望和懶惰)
- 不需要掌握 SQL: ObjectBox 更容易使用,不需要學習“外語”
- 現代 api: ObjectBox 具有簡化的 api,並提供了自己的反應式查詢和對 rxjava2/3的支持(具有真正的變更觀察)
- 更清晰的實體代碼: ObjectBox 具有不可見的代碼生成,並且不會在文件中生成源代碼
- 支持 Kotlin: ObjectBox 支持 Kotlin,包括數據類
- 同步即將到來: 基於典型的 REST 網絡方法,保持數據同步是很難做到的。使之變得簡單
Github地址:https://github.com/objectbox/objectbox-java
項目配置
1、項目根 build.gradle (項目級別) 配置:
buildscript {
ext.objectboxVersion = '2.8.1'
dependencies {
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
}
}
2、應用程序 build.gradle (模塊級) 配置:
apply plugin: 'io.objectbox' // 應用Android插件后
使用說明
1、新建實體類,如下:
@Entity
public class User {
@Id
public Long id;
public String userId;
public String userName;
public int age;
}
- @Entity:對象持久化;
- @Id:這個對象的主鍵,默認情況下,id是會被objectbox管理的,也就是自增id。手動管理id需要在注解的時候加上@Id(assignable = true)。當你在自己管理id的時候如果超過long的最大值,objectbox 會報錯;id的值不能為負數;當id等於0時objectbox會認為這是一個新的實體對象,因此會新增到數據庫表中;
- @Index:這個對象中的索引。經常大量進行查詢的字段創建索引,用於提高查詢性能;
- @Transient:某個字段不想被持久化,可以使用此注解,字段將不會保存到數據庫;
- @NameInDb:數據庫中的字段自定義命名;
- @ToOne:做一對一的關聯注解 ,此外還有一對多,多對多的關聯,例如Class的示例;
- @ToMany:做一對多的關聯注解;
- @Backlink:表示反向關聯。
它必須具有非私有的可見性(或非私有的 getter 和 setter 方法)。
2、點擊AndroidStudio中的Make Project
(小錘子的圖標),objectbox為項目生成類 MyObjectBox
類,用於初始化生成 BoxStore
對象,進行數據庫管理。然后,通過BoxStore對象為實體類獲得一個 Box 類,Box 對象提供對所有主要函數的訪問,比如 put、 get、 remove 和 query。
核心API:
- MyObjectBox: 基於您的實體類生成,MyObjectBox 提供一個構建器為您的應用程序設置一個 BoxStore。
- BoxStore: 使用 ObjectBox.BoxStore 的入口點是到數據庫的直接接口,並管理 Boxes。
- Box: 保存一個盒子並查詢實體。對於每個實體,有一個 Box (由 BoxStore 提供)。
3、數據庫操作:
(1)新建ObjectBox操作類,用於初始化及數據庫管理:
public class ObjectBox {
private static BoxStore mBoxStore;
public static void init(Context context) {
mBoxStore = MyObjectBox.builder()
.androidContext(context.getApplicationContext())
.build();
}
public static BoxStore get() { return mBoxStore; }
}
(2)調用ObjectBox類進行初始化,並為User實體類獲得一個 Box 類,進行具體操作:
private void initUserBox() {
ObjectBox.init(this);
mBoxStore = ObjectBox.get();
mUserBox = mBoxStore.boxFor(User.class);
}
(3)數據庫增刪改查:
-
初始化數據,批量添加,調用實體的
Box
對象,調用put()
方法即可完成新增操作:private void initUser() { //用戶ID生成器 mIdWorker = new SnowflakeIdGenerator(0, 0); mUserBox.removeAll(); mUserList = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < 10; i++) { User user = new User(); user.setUserId(String.valueOf(mIdWorker.nextId())); // 隨機生成漢語名稱 user.setUserName(NameUtils.createRandomZHName(random.nextInt(4) + 1)); user.setAge(18 + random.nextInt(10)); mUserList.add(user); } mUserAdapter = new UserAdapter(mUserList); rvUser.setAdapter(mUserAdapter); mUserBox.put(mUserList); }
-
查詢數據,通過
Box
的query()
方法可以得到一個QueryBuilder
對象,該對象可以實現各種查詢操作,里面包含contains()
,equal()
等方法:private void queryAllUser() { mUserList = mUserBox.query().build().find(); mUserAdapter.setNewData(mUserList); rvUser.smoothScrollToPosition(mUserList.size() - 1); }
-
添加數據,調用實體的
Box
對象,調用put()
方法即可完成新增操作:User user = new User(); user.setUserId(String.valueOf(mIdWorker.nextId())); user.setUserName(NameUtils.createRandomZHName(new Random().nextInt(4) + 1)); user.setAge(18 + new Random().nextInt(10)); // 插入新用戶 mUserBox.put(user);
-
修改數據,得到要修改的實體類,修改數據,隨后調用實體的
Box
對象put()
方法:User user = mUserList.get(mUserList.size() - 1); user.setUserName(NameUtils.createRandomZHName(new Random().nextInt(4) + 1)); //更新最末用戶 mUserBox.put(user);
-
刪除數據,調用實體的
Box
對象remove()
方法:User user = mUserList.get(mUserList.size() - 1); //刪除最末用戶 mUserBox.remove(user);

以上就是ObjectBox數據庫操作的基本使用說明了,在之前寫的GreenDao上面修改了使用方法,對比GreenDao還是十分簡單的,更多用法可以查看API文檔解鎖使用:https://docs.objectbox.io/。
訪問Github
項目查看具體代碼實現:
https://github.com/MickJson/DevelopmentRecord
歡迎點擊查閱及Star,我也會繼續補充其它有用的知識及例子在項目上。
歡迎點贊/評論,你們的贊同和鼓勵是我寫作的最大動力!