1. 程式人生 > >Android肝帝戰紀之ObjectBox移動資料庫框架探究與實現

Android肝帝戰紀之ObjectBox移動資料庫框架探究與實現

ObjectBox移動資料庫框架

  • 介紹
    ObjectBox是移動端資料庫框架,靈感來自於NoSql,速度非常快,號稱是市面上最快的移動端資料庫框架。

  • 為什麼要使用

  • 簡單,面向物件的API

  • 新增依賴
    專案級別的Gradle中新增:

buildscript {
    ext.objectboxVersion = '1.4.4'
    dependencies {
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

module級別的Gradle的頭部新增:

apply plugin: 'io.objectbox' // after applying Android plugin

之後Make Project一下專案

  • 新建一個數據庫物件,用註解@Entity標註
  • @Id是主鍵的標識,自增
@Entity
public class UserProfile{
    @Id
    private long id;
    private String name;
    private int age;

    public UserProfile(String name, int age){
        this.name = name;
        this
.age = age; } }

之後重新編譯一下程式,生成MyObjectBox的物件
之後在全域性的Application中獲取這個物件

public class MyApplication extends Application {

    private BoxStore boxStore;

    @Override
    public void onCreate() {
        super.onCreate();
        boxStore = MyObjectBox.builder().androidContext(this).build();
        if
(BuildConfig.DEBUG) { new AndroidObjectBrowser(boxStore).start(this); } } public BoxStore getBoxStore() { return boxStore; } }

之後在相應的Activity或者其他地方呼叫,每個資料庫物件都有自己相應的box

Box<UserProfile> userProfileBox = ((MyApplication)getApplication()).getBoxStore().boxFor(UserProfile.class);

獲取到userProfileBox之後,就可以進行相應的增刪改查了。


  • UserProfile user1 = new UserProfile(“wangming”, 18);
    userProfileBox.put(user1);

// 刪除id是2的資料
userProfileBox.remove(2);
// 刪除所有
userProfileBox.removeAll();
// 呼叫put方法完成更新
UserProfile user1 = userProfileBox.query().equal(UserProfile_name,"min").build().findFirst();
user1.setName("wangming");
userProfileBox.put(user1);
// 單條件查詢:從所有使用者中查出name="min"的資料
List<UserProfile> users = userProfileBox.query().equal(UserProfile_.name,"min").build().find();

// 多條件查詢:從所有使用者中name = "min",age>18,並且secondName是以W開頭的
userProfileBox.query().equal(UserProfile_.name,"min")
                    .greater(UserProfile_.age,18)
                    .startWith(UserProfile_.secondName,"W");
                    .build()
                    .find();

//要返回匹配查詢的所有實體,只需呼叫 find()。
//要僅返回第一個結果,請使用 findFirst()。

List item =roleBox.query().startsWith(Role_.role_name,"採")
                        .or().equal(Role_.role_name,"運營")
                        .orderDesc(Role_.created_at).build().find();

QueryBuilder 還提供了greater、less、contain等API