Android數據庫ObjectBox使用說明


前言

集成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);
    }
    
  • 查詢數據,通過Boxquery()方法可以得到一個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,我也會繼續補充其它有用的知識及例子在項目上。

歡迎點贊/評論,你們的贊同和鼓勵是我寫作的最大動力!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM