Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起
Posted 第三女神程忆难
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起的主要内容,如果未能解决你的问题,请参考以下文章
Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起
Android 安卓告别SharedPreFerences,你好MMKV
Android 安卓告别SharedPreFerences,你好MMKV