当前位置: 首页 > news >正文

Android ObjectBox数据库使用与集成指南

  • 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

相关文章:

  • Doris系列之基础使用
  • Magma:多模态 AI 智体的基础模型
  • DeepSeek 助力 Vue3 开发:打造丝滑的下拉选择框(Dropdown Select)
  • 数据结构——基于单链表创建通讯录
  • LangChain教程 - RAG - PDF问答
  • HarmonyOS+Django实现图片上传
  • AVFormatContext
  • Node.js v16 版本安装
  • 排序(数据结构篇)
  • YOLOv12 ——基于卷积神经网络的快速推理速度与注意力机制带来的增强性能结合
  • 百度觉醒,李彦宏渴望光荣
  • 浅析 Redis 分片集群 Cluster 原理、手动搭建、动态伸缩集群、故障转移
  • 《Spring Boot + MySQL高性能应用实战:性能优化技巧与最佳实践》
  • CMake小结2(PICO为例)
  • 【目标检测旋转框xml2txt】rolabelimg标注的xml格式label转YOLO格式txt文件
  • 【Java项目】基于Spring Boot的旅游管理系统
  • Blueprint —— Events
  • vue3-07模拟vue3的响应式原理Proxy (代理对象)与Reflect (反射对象)
  • NNP_test_cpp
  • 深度强化学习落地调参技巧
  • “80后”北京市东城区副区长王智勇获公示拟任区委常委
  • KPL“王朝”诞生背后:AG和联赛一起迈向成熟
  • 牛市早报|中方调整对美加征关税措施,五部门约谈外卖平台企业
  • 加拿大总理宣布新内阁名单
  • 商务部就开展打击战略矿产走私出口专项行动应询答记者问
  • 马上评丨未成年人“擦边”短视频岂能成流量密码