注册

Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起



在这里插入图片描述







ObjectBox


ObjectBox是一个超快的面向对象数据库,相比于Sqlite,效率高了10倍左右






引入ObjectBox


在跟项目中的build.gradle中引入:


buildscript {
...
ext.objectboxVersion = '2.9.1'

dependencies {
...
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
...
}
}

在app下的build.gradle头部引入


(有以下两种情况,看你项目中用的什么):


plugins {
...
id 'io.objectbox'
}

apply plugin: 'io.objectbox'





简单的代码栗子


接下来将会讲解ObjectBox基本使用






生成和创建数据库


1、新建一个模型类,并使用 @Entity 将类注解,@Id 为自增主键(进阶的代码栗子会详细一点讲注解),@Id 注解也是必不可少的。


package com.mt.objectboxproject

import io.objectbox.annotation.Entity
import io.objectbox.annotation.Id

@Entity
data class Person(
@Id
var id: Long = 0,
var age: Int = 0,
var name: String? = null
)



2、AndroidStudio操作:Build -> MakeProject,或者点击运行按钮旁边的小锤子锤一下,这一步是为了生成ObjectBox所需要的文件,之后便会看到生成了 app\objectbox-models\default.json 文件






ObjectBox初始化


1、创建ObjectBox的小助手,需要在 Application 中进行调用 init 初始化


package com.mt.objectboxproject

import android.content.Context
import io.objectbox.BoxStore

/**
* ObjectBox的小助手,需要在Application中进行调用init初始化
*/

object ObjectBox {
lateinit var store: BoxStore
private set

fun init(context: Context) {
store = MyObjectBox.builder()
.androidContext(context.applicationContext)
.build()
}
}



2、在 Application 中初始化


package com.mt.objectboxproject

import android.app.Application

class MainApplication : Application() {
override fun onCreate() {
super.onCreate()

//初始化ObjectBox
ObjectBox.init(this)
}
}



基本操作 - 增


package com.mt.objectboxproject

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//插入一条数据
val userBox = ObjectBox.store.boxFor(Person::class.java)
val person = Person()
person.age = 21
person.name = "第三女神程忆难"
userBox.put(person)

//==========================================================================================

//插入多条数据
val persons = mutableListOf<Person>()

//模拟多条数据
val person1 = Person()
person1.age = 24
person1.name = "1bit"

val person2 = Person()
person2.age = 25
person2.name = "梦想橡皮擦"

val person3 = Person()
person3.age = 26
person3.name = "沉默王二"

persons.add(person1)
persons.add(person2)
persons.add(person3)

//插入数据库
userBox.put(persons)


}
}



基本操作 - 查


package com.mt.objectboxproject

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val userBox = ObjectBox.store.boxFor(Person::class.java)

//==========================================================================================
//根据主键id查询
val person = userBox[1]

//==========================================================================================
//获取person有所数据
val allPersons = userBox.all

//==========================================================================================
//条件查询
val build = userBox.query()
.equal(Person_.name, "沉默王二")
.order(Person_.name)
.build()

//查找数据
val find = build.find()

//记得close
build.close()

}
}



基本操作 - 删


package com.mt.objectboxproject

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val userBox = ObjectBox.store.boxFor(Person::class.java)

//==========================================================================================
//根据主键Id去删除
val isRemoved = userBox.remove(1)

//==========================================================================================
//根据主键id集合去删除
val ids = mutableListOf<Long>(1,2,3,4)
userBox.removeByIds(ids)

//==========================================================================================
//根据模型类去删除
val person = userBox[1]
person.name = "第三女神程忆难"
userBox.remove(person)

//==========================================================================================
//删除所有数据
userBox.removeAll()

}
}



基本操作 - 改


package com.mt.objectboxproject

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

val userBox = ObjectBox.store.boxFor(Person::class.java)

//==========================================================================================
//先查询获取到person,set值后重新put
val person = userBox[1]
person.name = "小傅哥"
userBox.put(person)
}
}





进阶的代码栗子


注解讲解






注解



  • @Id:主键,默认为自增主键,交由ObjectBox管理
  • @Index:注释一个属性,为相应的数据库列创建一个数据库索引。这可以提高查询该属性时的性能。
  • @Transient:标记不应保留的属性。在 Java 中,静态或瞬态属性也不会被持久化。
  • @NameInDb:对数据库中字段名进行自定义。
  • @Backlink:反向关联。
  • @ToOne:一对一关联注解。
  • @ToMany:一对多关联注解。





ObjectBox地址:https://docs.objectbox.io

0 个评论

要回复文章请先登录注册