一、特點:
- 更快:目前的所有移動端資料庫都快。
- Object API:ObjectBox是一個從零開始的物件資料倉儲(沒有ORM,沒有SQLite)。API簡單易學
- 物件關係: 物件之間的引用和關係編譯在原生程式碼中
- (Reactive)響應:使用自身的響應式方法或者內部整合的Rxjava處理資料簡單又強大。
- 簡單的執行緒:ObjectBox能在所有執行緒中工作,不需要其他引數。
- 無需手動控制版本升級:ObjectBox自動新增、刪除、更新新的物件屬性。
二、如何使用
1、ObjectBox GitHub地址:
https://github.com/objectbox/objectbox-java
2、如何配置
1.Gradle設定
在Root build檔案中新增
// In your root build.gradle file:
buildscript {
ext.objectboxVersion = '1.2.1'
repositories {
jcenter()
maven { url "http://objectbox.net/beta-repo/" }
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.3'
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
}
}
allprojects {
repositories {
jcenter()
maven { url "http://objectbox.net/beta-repo/" }
}
}
// In your (app) module build.gradle file:
apply plugin: 'com.android.application'
apply plugin: 'io.objectbox'
複製程式碼
Gradle外掛會自動新增依賴庫,並配置一個註解處理器,在構建時生成程式碼和JSON資料物件。
然後編寫實體(@Enter)並編譯您的專案,例如在Android Studio中使用Build> Make Project。
如果庫或註解處理器沒有自動新增到依賴中,您可以手動新增它們。對於註解處理器,在Java中使用annotationProcessor關鍵字,如果專案使用Kotlin,則使用kapt關鍵字:
dependencies {
// all below should be added automatically by the plugin
compile "io.objectbox:objectbox-android:$objectboxVersion"
// some useful Kotlin extension functions
// compile "io.objectbox:objectbox-kotlin:$objectboxVersion"
annotationProcessor "io.objectbox:objectbox-processor:$objectboxVersion"
// When using Kotlin use kapt instead:
// kapt "io.objectbox:objectbox-processor:$objectboxVersion"
}
複製程式碼
2.可選配置 在您的app模組Gradle構建檔案(您的實體所在的位置)中,您可以新增一些可選的配置。例如,你可以在除錯模式切換為ObjectBox註解處理器(執行Gradle –info 可以看到Debug 輸出資訊):
// Using annotationProcessor (Java):
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [ 'objectbox.debug' : 'true' ]
}
}
}
}
// Using kapt (Kotlin):
kapt {
arguments {
arg("objectbox.debug", true)
}
}
複製程式碼
3、簡單使用
1.建立一個實體物件
@Entity
public class Note {
@Id
long id;
String text;
String comment;
Date date;
...
}
複製程式碼
@Entity:註解表明 Note 是一個寫入資料庫的實體
@Id :表明 long id 作為Key
接下來編譯工程,ObjectBox會生成一些類,如 MyObjectBox 。還有一些ObjectBox在內部使用的其他一些類。
2.基本使用
- 建立獲得操作實體 :首先,我們必須為我們的Note類準備一個Box物件,我們 在NoteActivity 的 onCreate()中做 :
//注意: 在Demo中,“App”是繼承Application的類 ,推薦BoxStore在這裡獲取 。
notesBox = ((App) getApplication()).getBoxStore().boxFor(Note.class);
複製程式碼
- 插入:
//請注意,Note傳遞了0作為id。表示一個新的實體,ObjectBox會在內部分配一個新的id 。
Note note = new Note(0, noteText, comment, new Date());
notesBox.put(note);
Log.d(App.TAG, "Inserted new note, ID: " + note.getId());
複製程式碼
- 刪除:
notesBox.remove(note);
複製程式碼
- 更新
// note 不是自己建立的 是從資料庫中查出來的
note.setText("This note has changed.");
notesBox.put(note);
複製程式碼
- 初始化資料庫
現在您已經看到了ObjectBox 正常執行,但是我們如何獲取 BoxStore例項?通常,您應該為Application類中的整個應用程式設定一次BoxStore:
//在Application中 建立boxStore ,然後對外提供getterStore ()之類的getter,
//讓activity和fragment或者其他你想呼叫的地方來使用。
boxStore = MyObjectBox.builder().androidContext(App.this).build();
複製程式碼
注意
- (MyObjectBox 類是自動生成,如果沒有生成,請Rebuild)
- ObjectBox本身是一個NoSQL資料庫,因此不基於SQL或SQLite。這就是為什麼在初始化期間不需要設定“CREATE TABLE”語句的原因。
三、Box API介紹
1、核心類
一旦定義了至少一個實體併成功構建了專案,就可以在Android專案中開始使用ObjectBox。 以下核心類是ObjectBox的基本介面:
- MyObjectBox:根據實體類自動生成,MyObjectBox提供一個builder 來獲取BoxStore。
- BoxStore:使用ObjectBox的入口。BoxStore是您的資料庫的直接介面和管理Box。
- Box:一個Box持續存在並用於查詢實體。對於每個實體,都有一個Box(由BoxStore提供)。
- 實體:使用ObjectBox註釋將物件類標記為可持久。
2、初始化
最後,初始化ObjectBox類的基本步驟:
// do this once, for example in your Application class
boxStore = MyObjectBox.builder().androidContext(App.this).build();
// do this in your activities/fragments to get hold of a Box
notesBox = ((App) getApplication()).getBoxStore().boxFor(Note.class);
複製程式碼
該示例假定存在一個 Note 實體類。通過Box( NotesBox 型別會根據Note自動生成),我們可以呼叫notesBox 對Note資料進行操作。
3.Box基本操作
該Box類 是一個基本類。如前所述,您可以通過BoxStore.boxFor()獲取Box單例 。Box單例使您可以訪問特定型別的物件。例如,如果您有 Customer 和 Order 實體,則需要兩個Box物件與其進行互動:
Box<Customer> customerBox = boxStore.boxFor(Customer.class);
Box<Order> orderBox = boxStore.boxFor(Order.class);
複製程式碼
這些是Box類提供的一些操作:
-
put: 寫入一個物件,它會覆蓋資料庫中具有相同Id的物件。換句話說,使用 put 來插入或更新物件。put返回值為該物件在資料庫中的Id。各種 put 過載方法支援放置多個物件,方便快捷。
-
get:引數為Id,就可以獲取資料庫中該Id的物件。要獲取某個型別的所有物件,請使用 getAll 。
-
remove: 刪除該物件。有多個過載方法刪除多個實體, removeAll 刪除一個型別的所有物件。
-
count:返回Box儲存的物件的數量。
-
query:返回query builder。
-
物件Object IDs:
物件必須有一個long型別的ID(註解為@Id)。當然也可以使用包裝類java.lang.Long,但是我們不建議這麼做,因為long在ObjectBox 中非常的高效。
如果您的應用程式中id是其他型別(例如由伺服器提供的字串UID),則可以將它們設定為標準屬性 (例如String uid 正常的資料表欄位),並使用query查詢uid來得到實體。
- 特殊物件ID:
物件ID可以是任何 長整型 值,但有兩個例外:
- ID為0的物件(如果ID是Long型別,則為 空)被認為是新的。插入ID為0的物件,資料庫會分配一個新的ID。
- 0xFFFFFFFFFFFFFFFF(在Java中為-1): 此值由ObjectBox保留供內部使用,可能不會被應用程式使用.
- 物件ID分配
預設情況下,物件ID由ObjectBox分配。對於每個新的物件,ObjectBox將分配一個未使用的ID,該ID高於當前在盒子中使用的最高ID值。例如,如果在一個Box中有兩個物件ID 1和ID 100,則放置的下一個物件將被分配ID 101。
預設情況下,只有ObjectBox可以分配ID。如果您嘗試使用的ID大於當前最高ID或更改ID,則ObjectBox會報錯。 如果您需要自己分配ID,則可以將ID註釋更改為 @Id(assignable = true) 。這將允許將一個物件Id有任何值,包括0。
- 事務
ObjectBox提供強大的事務處理功能,但對於許多應用程式來說,僅僅使用事務的一些基本用法就足夠了。
- 1.一個 put 執行一個隱含的事務。
- 2.多個物件 首選list過載方法put( entities)
- 3.對於迴圈中的大量資料庫互動,請考慮顯式事務,例如使用 runInTx()
學習參考: https://blog.csdn.net/vxiaocai/article/details/78646399