- ObjectBox其核心特点
- ObjectBox与 SQLite 和 Realm 的对比
- Android集成ObjectBox
- 创建ObjectBox实体对象
- 创建ObjectBox操作管理类OBManager
- 在Application初始化ObjectBox
- 插入或更新数据
- 查询数据
- 统计数据
- 分页数据查询
- 删除数据
- 总结
今天分享一套Android另一个数据库ObjectBox。ObjectBox 是一款专为移动端和物联网(IoT)设备设计的高性能 NoSQL 数据库,专注于极致的速度和轻量级资源占用。它由 GreenRobot 团队开发(同团队开发了 GreenDAO 和 EventBus),适用于 Android、iOS、Linux、Windows 等平台,尤其适合需要高效本地数据存储的场景。
ObjectBox其核心特点
- 非常高的性能
- 基于原生 C 核心库,读写速度远超 SQLite 和其他 ORM 框架。
- 支持 零拷贝序列化,减少内存分配,提升数据处理效率。
- 简单易用
- 无 SQL 语法:通过链式 API 或 Kotlin/Java 方法直接操作对象,避免 SQL 注入风险。
- 自动生成代码:通过注解生成数据模型和查询类(如 User_),减少手写代码。
- 经量级
- 核心库体积小(约 1MB),适合移动端和嵌入式设备。
- 低内存和 CPU 占用,延长设备续航时间。
- 实时数据同步(ObjectBox sync)
- 提供端到端数据同步功能,支持离线优先的分布式应用(需商业授权),在一般项目应用中这项是用不到的,使用社区版即可。
ObjectBox与 SQLite 和 Realm 的对比
特性 | ObjectBox | SQLite | Realm |
---|---|---|---|
性能 | ⚡️ 最快 | 中等 | 快 |
API 易用性 | ✅ 链式调用,无 SQL | ❌ 需写 SQL | ✅ 对象化操作 |
跨平台支持 | Android, iOS, 桌面 | 通用 | Android, iOS |
同步功能 | ✅ (商业版) | ❌ | ✅ (商业版) |
开源协议 | Apache 2.0 | 公有领域 | Apache 2.0 |
Android集成ObjectBox
本人觉得直接接官网API仍有点麻烦,因此单独封装了SDK以便后面统一使用;
- 官方文档:https://docs.objectbox.io/
- GitHub 仓库:https://github.com/objectbox/objectbox-java
首先需要在libs.versions.toml添加包引用地址(gradle新版本才会有,老项目直接在dependencies配置即可)
objectboxGradlePlugin = "4.1.0"
objectbox-gradle-plugin = {
module = "io.objectbox:objectbox-gradle-plugin", version.ref = "objectboxGradlePlugin" }
在项目根目录的build.gradle配置插件的classpath
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath(libs.objectbox.gradle.plugin)
}
}
然后在项目模块的build.gradle配置以下属性(配置完后记得需要同步),当然在这之前需要配置objectbox sdk引用,这一步完成之后包的objectbox就算集成好了;
storageObjectbox = "1.0.0"
eyinfo-storage-objectbox = {
module = "io.github.eyinfo:storage-objectbox", version.ref = "storageObjectbox" }
plugins {
alias(libs.plugins.android.application)
}
//导入插件
apply plugin: 'io.objectbox'
android {
//常规配置项
}
dependencies {
//引用objectbox sdk
api libs.eyinfo.storage.objectbox
}
创建ObjectBox实体对象
- 对象必须要设置@Entity注解
- @Id注解:如果assignable=true表示主键值需要手动传入;如果assignable=false表示主键值为内部自增行为,无需外部传入;
@Entity
public class UserOB {
@Id(assignable = true)
private Long id;
private int age;
private String name;
//生成getter、setter属性
}
这一步配置完后同步工程才能生成MyObjectBox对象,如果未自动生成MyObjectBox可能会导致后续无法使用ObjectBox数据库;
创建ObjectBox操作管理类OBManager
这里继承ObjectBoxAbstractManager实现与配置对应超类方法即可,方便使用整个模块中配置一次即可;
public class OBManager extends ObjectBoxAbstractManager {
private static volatile OBManager instance;
public static OBManager getInstance() {
if (instance == null) {
synchronized (OBManager.class) {
if (instance == null) {
instance = new OBManager();
}
}
}
return instance