之前我已介绍了jetpack组件的数据库:Room,有小伙伴需要了解Room数据库可以查看这个地址:Android JetPack组件之Room数据库的集成与详解_android room数据库_蜗牛、Z的博客-CSDN博客
数据库的性能对设备来说很重要,我们都知道,数据库其实是文件格式保存,通过一定的规则查找内容的。但是设备不同,选择数据库的目的自然不同。
今天我将介绍市面最近比较流行的数据库ObjectBox,从接入到使用以及问题的总结
移动数据库是在移动设备上运行的边缘数据库,即支持Android和iOS。它是一种嵌入式数据库(嵌入到应用程序中的数据库),在移动设备等受限的去中心化设备上也进行了高性能优化。
objectBox数据库是一个新的产品,底层是以C和C++完成的数据库引擎。属于插件化东西,比Room接入要复杂一些,这是一款NOsql的数据库,也就是说,这个数据库不需要sql语句就可以使用,是以对象为实体的操作数据库。
Mobile Database | Android Database | Swift Database | Flutter Database
buildscript {
ext.objectboxVersion = "3.6.0"
dependencies {
classpath("io.objectbox:objectbox-gradle-plugin:$objectboxVersion")
}
}
说明:目前官方的最近版本是3.6.0
plugins {
id("kotlin-android") // Only for Kotlin projects.
id("kotlin-kapt") // Only for Kotlin projects.
id("io.objectbox") // Apply last.
}
//或者 根据gradle高低版本选择构建方法
apply plugin: "kotlin-android" // Only for Kotlin projects.
apply plugin: "kotlin-kapt" // Only for Kotlin projects.
apply plugin: "io.objectbox" // Apply last.
说明:因为objectBox是kotlin语言写的,版本是1.7.20,所以如果你的kotlin版本过低,则需要升级或者,22.0之间的androidsudio需要升级到最近版本。
object ObjectBox {
lateinit var store: BoxStore
private set
fun init(context: Context) {
store = MyObjectBox.builder()
.androidContext(context.applicationContext)
.build()
}
}
注意:
1、有人代码中无法找到MyObjectBox这个类,是因为你第一次接入,需要build一下项目,插件才能自动生成。
2、初始化入口在Application
在objectBox中,表是通过对象来维护的,需要通过BoxStore的store.boxFor(cls)来获取这张表。参数class就是当前表的class的实体。
@Entity
class MyInfo {
@Id
var id: Long = 0
var name: String? = ""
}
说明:通过@Entity来修饰对象是一个表的实体,字段指向一个id,其他修饰可以自行查看
public fun getDataBaseBox(cls: Class):Box {
return store.boxFor(cls)
}
说明:通过泛型来获取表,如果不存在就会创建
表的操作其实很简单,都是通过对象来完成的。
//插入一条数据
public fun insertItem(t: T, cls: Class): Long {
return store.boxFor(cls).put(t)
}
//批量插入数据
public fun insertList(t: MutableList, cls: Class) {
store.boxFor(cls).put(t)
}
//获取表中第一条数据
public fun getFirst(cls: Class): T {
return store.boxFor(cls).all.first()
}
//获取表中的所有数据
public fun getAll(t: T, cls: Class): MutableList {
return store.boxFor(cls).all
}
//清空表
public fun getClean(cls: Class) {
store.boxFor(cls).removeAll()
}
//删除单个数据
public fun getDeleteItem(t: T, cls: Class) {
store.boxFor(cls).remove(t)
}
这些都是基于对象完成的,还有一些操作是基于Id来完成,保持一些查询也是基于查询条件,获取表的对象等........
这个表是自动关闭,和释放资源,你只管用,其他不需要你去操作
如果你是新手,或者小白。无法自己去维护复杂的逻辑,像表的关闭等都不需要你管
is not a known entity. Please add it and trigger generation again
解答:是因为你的model没有引入插件,虽然你的项目集成了插件,但是在每个模块还是需要单独引入,和kotlin一样,模块里是独立的。否则你创建表报错。
只要这个模块需要创建表,你就需要再模块中引入:id("io.objectbox"),编译后会产生一个objectbox-model的文件夹,里面就是你的表信息
刚接入项目一定要build一下项目, 或者make。否则不会自动生成,只有生成后才可以使用
因为objectBox的kotlin版本是在1.7.20,kotlin在1.7后面有大改版,所以你的kotlin必须升级,升级kotin有可能需要升级的androidstudio文件,所以你必须要保持最近的。注意kotlin版本是:1.7.20,不是1.7.2,如果你写1.7.2无法更新,会报升级失败