Android 数据库之 ObjectBox (三)

Android 数据库之 ObjectBox (三)

一、简介

ObjectBox 是 greenrobot 公司开发的全新非关系型数据库框架,目前最新的版本是 v2.3.4 。该数据库并没有采用 Android 原生的 SQLite 数据库,而是使用上注重性能与资源使用的序列化类库 FlatBuffers 做封装,将数据用字节的方式存储在文件中。

  • 数据处理快:目前移动端顶尖高性能的数据库;
  • API 简单:没有行、列和 SQL,也没有ORM、SQLite,完全从零开始的对象;
  • 响应快:自身支持数据观察器,也可以与RxJava集成处理数据;
  • 版本升级:可以自动添加、删除、更新新的对象属性。

二、集成

  • 在项目级别的 build.gradle 中:
buildscript {
    ext.objectboxVersion = '2.3.4'
    repositories {
        maven {
            url "http://objectbox.net/beta-repo/"
        }
    }
    dependencies {
        //ObjectBox依赖
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}
  • 在模块级别(如 app 模块)的 build.gradle 中:
apply plugin: 'com.android.application'
// 或者 apply plugin: 'com.android.library'
apply plugin: 'io.objectbox'

dependencies {
    debugCompile 'io.objectbox:objectbox-android-objectbrowser:2.3.4'
    releaseCompile 'io.objectbox:objectbox-android:2.3.4'
    annotationProcessor 'io.objectbox:objectbox-processor:2.3.4'
}
  • 引入 Java Bean 类
@Entity(useNoArgConstructor = true)
public class SimpleEntity {
   
    @Id
    long _id;       // 主键id
    boolean simpleBoolean;
    byte simpleByte;
    short simpleShort;
    int simpleInt;
    long simpleLong;
    float simpleFloat;
    double simpleDouble;
    String simpleString;
    byte[] simpleByteArray;
}

三、源码架构分析

  • 图例

在这里插入图片描述

  • 关键类
类名 描述
Entity 带上了ObjectBox注解的Java Bean类,一般来说,没有修改注解情况下这个类的类名会被映射成数据表的表名,而字段名会被映射成数据表的属性(字段上的注解就代表一个约束条件,此外数据库升级时)。
Entity_ 存储数据库对应表的信息,以及属性相关的信息。
MyObjectBox 创建Entity后,由插件自动生成的类。它只对外提供builder方法返回 BoxStoreBuilder。其中有一个getModel方法将定义的所有数据表依次通过 “参数构造” 、“实体对象构造” 和 “序列化数据”,最终返回byte数组,用于给 Native 层创建数据库。
FlatBufferBuilder FlatBuffers 构造器,即Google发布的一个跨平台的序列化类库,类似于Json序列化方式,但 FlatBuffers 性能更优。
BoxStore 它代表整个数据库,由BoxStoreBuilder#build生成(可以定制化配置:数据库文件名、最大读并发数【默认126】、最大容量【默认1G】等等)。
Box 执行 BoxStore#boxFor 生成对应的 Entity 对象的管理 Box。用于对 Entity 对象的增删改查操作。
Transaction 事务类是数据库管理系统执行过程中的一个逻辑单位,所有 Transaction 对象都是通过 beginTxbeginReadTx 生成,后者生成一个只读的事务(不允许写入,可以复用,性能会更好)。所有的事务都是调用 Native 生成的,事务类持有 long 类型变量的句柄,后续的操作再将句柄回传给 Native。
Cursor Box 的职责是增删改查操作࿰
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值