ObjectBox使用簡記

這兩天聽朋友說起了最近Android出來了一個NoSql數(shù)據(jù)庫ObjectBox,懷揣著好奇就建了一個Android程序進(jìn)行了簡單的運(yùn)用和測試锌畸,感覺效果很好毅整,特此記~

  • 此文主要供 Kotlin使用ObjectBox

1.添加依賴

  • 在project的build.gradle添加如下配置
buildscript {
   //目前版本是1.4.1
    ext.objectboxVersion = '1.4.1'
    ext.kotlin_version = '1.2.10'
    repositories {
        google()
        jcenter()
      maven { url "http://objectbox.net/beta-repo/" }
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

allprojects {
    repositories {
        google()
        jcenter()
        maven { url "http://objectbox.net/beta-repo/" }
    }
}
  • 在app的build.gradle中需要添加如下配置
apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

apply plugin: 'kotlin-kapt'


//此依賴主要用于browser嗦枢,可以在瀏覽器中查看app的數(shù)據(jù)
dependencies {
  debugImplementation "io.objectbox:objectbox-android-objectbrowser:$objectboxVersion"
  releaseImplementation "io.objectbox:objectbox-android:$objectboxVersion"
}

//一定要在 上面兩個依賴之下 此plugin
apply plugin: 'io.objectbox' // after applying Android plugin


//在正常的dependencies中添加如下依賴
dependencies{
//主要是針對kotlin
compile "io.objectbox:objectbox-kotlin:$objectboxVersion"
}
  • 在應(yīng)用中的正常使用(建議在Applicaion中初始化),以下是初始化(我也是初學(xué)kotlin可能存在一些語法不夠簡潔阅悍,不喜勿噴哈):
class App : Application() {
  override fun onCreate() {
    super.onCreate()
    initObjectBox()
  }

  //定義靜態(tài)塊 靜態(tài)方法
  companion object {
    lateinit var boxStore: BoxStore
    fun getBoxStoreInstance() = boxStore
  }

  private fun initObjectBox() {
    boxStore = MyObjectBox.builder().androidContext(this).build()
    if (BuildConfig.DEBUG) {
      boxStore?.let {
        //可以理解為初始化連接瀏覽器(可以在瀏覽器中查看數(shù)據(jù),下面再說)
        val started = AndroidObjectBrowser(boxStore).start(this)
        Log.i("ObjectBrowser", "Started: " + started)
      }
    }

  }
}
  • 創(chuàng)建實體類
//實體類學(xué)生
@Entity
class Student{
  @Id var id:Long = 0
  lateinit var name:String

  //這里是假設(shè)學(xué)生和老師的關(guān)系(relation)是一對一
  lateinit var teacher:ToOne<Teacher>
}

//實體類老師
@Entity
class Teacher{
  @Id var  id:Long =0

  lateinit var name:String

  //這里假設(shè)老師和學(xué)生的關(guān)系是一對多(一個老師有多個學(xué)生)
  @Backlink
  lateinit var students: ToMany<Student>
}
  • 基本使用方法
//此處是我在Application里面做了初始化操作
var boxStore = App.getBoxStoreInstance()

//如果沒有在Application里面初始化弦撩,使用的地方初始化可以這樣操作步咪,MyObjectBox需要build工程之后才會出來
//var boxStore = MyObjectBox.builder().androidContext(this).build()
var studentBox: Box<Student> = boxStore.boxFor<Student>()
var teacherBox: Box<Teacher> = boxStore.boxFor<Teacher>()

//創(chuàng)建一個老師對象和一個學(xué)生對象
var teacher = Teacher()
teacher.name = "我是老師"
//學(xué)生和老師的relation是1對1 如果沒有關(guān)系則不用這一步
//student.teacher.target = teacher

var student = Student()
student.name = "我是學(xué)生"


//創(chuàng)建一個學(xué)生列表
var allStudents: MutableList<Student> = mutableListOf()

//老師和學(xué)生是一對多的關(guān)系,不用relation則可以不用次關(guān)系
teacher.students.addAll(allStudents)

//以下是對數(shù)據(jù)的基本操作
//- 添加數(shù)據(jù)(可以單個數(shù)據(jù)添加益楼,也可以添加一個列表數(shù)據(jù))
studentBox.put(student)
studentBox.put(mutableListOf())

//查詢數(shù)據(jù)的幾種方式
1.get方式查詢數(shù)據(jù)(可以傳入id猾漫,id列表等等,具體查看api)
var student=studentBox.get(id)

2.find方式(傳入你Entity對應(yīng)的屬性和值進(jìn)行查詢感凤,Student_構(gòu)建會自動生成)
var findStudents: List<Student> = studentBox.find(Student_.name, "張三")

3.query方式(適用于復(fù)雜查詢可以拼接各種條件悯周,如下簡單拼接)
var queryStudents: List<Student> = studentBox.query()
        .equal(Student_.name, "張三")
        .between(Student_.id, 1, 10)
        .build()
        .find();

//更新數(shù)據(jù)的操作和插入的操作相同都是put
studentBox.put(student)

//刪除數(shù)據(jù)的操作(可以單個id,多個id陪竿,單個對象禽翼,對象列表等)
studentBox.remove(id)
studentBox.remove(id1,id2...)
studentBox.remove(student)
studentBox.remove(mutableListOf())
  • 其他操作(browser查看數(shù)據(jù)),上面依賴其實已經(jīng)添加過也加了注釋族跛,但是在這還是做個補(bǔ)充吧.
//1.app的build.gradle中加入如下依賴
dependencies {
    debugImplementation "io.objectbox:objectbox-android-objectbrowser:$objectboxVersion"
    releaseImplementation "io.objectbox:objectbox-android:$objectboxVersion"
}
//一定要在 上面兩個依賴之下 此plugin
apply plugin: 'io.objectbox'



//2.代碼中加入如下代碼(加入到初始化之后)
if (BuildConfig.DEBUG) {
      boxStore?.let {
        val started = AndroidObjectBrowser(boxStore).start(this)
        Log.i("ObjectBrowser", "Started: " + started)
      }


//3.在manifest中添加網(wǎng)絡(luò)訪問權(quán)限
<uses-permission android:name="android.permission.INTERNET" />

4.以上已經(jīng)完成基本瀏覽數(shù)據(jù)的配置捐康,如果Android手機(jī)當(dāng)前引用的消息通知是打開的會打開的,
則會收到一條通知點擊通知則瀏覽器會打開數(shù)據(jù)瀏覽。如果需要瀏覽器打開則需要轉(zhuǎn)發(fā)端口

adb forward tcp:8090 tcp:8090

瀏覽器可以訪問 http://localhost:8090/index.html 直接打開
  • 溫馨提示
1.@Id var  id:Long =0 表示ID從1開始 自增長 且必須指定為Long類型

2.數(shù)據(jù)的存儲位置為/data/data/com.xx.xx(應(yīng)用包名)/objectbox/

如上即學(xué)習(xí)ObjectBox一點簡記庸蔼,如有錯誤歡迎指正~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贮匕,隨后出現(xiàn)的幾起案子姐仅,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件掏膏,死亡現(xiàn)場離奇詭異劳翰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)馒疹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進(jìn)店門佳簸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人颖变,你說我怎么就攤上這事生均。” “怎么了腥刹?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵马胧,是天一觀的道長。 經(jīng)常有香客問我衔峰,道長佩脊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任垫卤,我火速辦了婚禮威彰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘穴肘。我一直安慰自己歇盼,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布梢褐。 她就那樣靜靜地躺著旺遮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪盈咳。 梳的紋絲不亂的頭發(fā)上耿眉,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天,我揣著相機(jī)與錄音鱼响,去河邊找鬼鸣剪。 笑死,一個胖子當(dāng)著我的面吹牛丈积,可吹牛的內(nèi)容都是我干的筐骇。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼江滨,長吁一口氣:“原來是場噩夢啊……” “哼铛纬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起唬滑,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤告唆,失蹤者是張志新(化名)和其女友劉穎棺弊,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體擒悬,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡模她,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了懂牧。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片侈净。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖僧凤,靈堂內(nèi)的尸體忽然破棺而出畜侦,到底是詐尸還是另有隱情,我是刑警寧澤拼弃,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布夏伊,位于F島的核電站,受9級特大地震影響吻氧,放射性物質(zhì)發(fā)生泄漏溺忧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一盯孙、第九天 我趴在偏房一處隱蔽的房頂上張望鲁森。 院中可真熱鬧,春花似錦振惰、人聲如沸歌溉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痛垛。三九已至,卻和暖如春桶蛔,著一層夾襖步出監(jiān)牢的瞬間匙头,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工仔雷, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留蹂析,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓碟婆,卻偏偏與公主長得像电抚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子竖共,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,512評論 25 707
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,748評論 6 342
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理蝙叛,服務(wù)發(fā)現(xiàn),斷路器公给,智...
    卡卡羅2017閱讀 134,599評論 18 139
  • 蟲鳴的夜晚甥温, 是獨一無二的旋律锻煌。 輕緩的步子, 帶動拂面的春風(fēng)姻蚓。 一股春的氣息, 活躍著每一寸神經(jīng)匣沼。 窗外的夜晚狰挡,...
    小葵葵的大愿望閱讀 226評論 0 1
  • 三原則:圖原創(chuàng),文原創(chuàng)释涛,詩原創(chuàng)加叁。 大夢誰先覺 平生我自知 吾非諸葛亮 圓滾滾一只 本居山野外 家鄉(xiāng)在四川 奈何成國...
    秋水飲馬閱讀 545評論 22 22