作为数据库的库, 那肯定是用来操作数据的咯;
你能想到的增删改查
肯定是必备的咯.
多余的废话, 就到此!
日前最新版是: 2.3.4
上路:
文章目录
库的优点
从我个人观点来看, 优点有以下几点:
- 同时支持在
App
和Library
工程中使用不同的数据库
- 全自动的数据库
迁移
,增删
字段, 自动处理. - 数据量
10K
左右, 查询速率秒杀同类库
, 当然数据量大了, 不能秒杀, 也能持平.
接入指南
1.root工程根目录的build.gradle
注意是工程根目录
哦
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
完整如下:
buildscript {
ext.objectboxVersion = '2.3.4'
respositories {
google()
jcenter()
}
dependencies {
// Android Gradle Plugin 3.0.0 or later supported
classpath 'com.android.tools.build:gradle:3.4.0'
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
}
}
2.app/library工程的build.gradle
//...
apply plugin: 'io.objectbox'
完整如下:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.angcyo.objectboxdemo"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.0.2'
implementation 'androidx.core:core-ktx:1.0.1'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
}
//...
apply plugin: 'io.objectbox'
推荐将此代码, 放在build.gradle
文件的最后面
3.初始化
public static void init(Context context) {
BoxStore boxStore = MyObjectBox.builder()
.androidContext(context.getApplicationContext())
.build();
}
简单的实体:
@Entity
public class User {
@Id public long id;
public String name;
}
注意: @Id 是必须的, 且必须是long类型. 值必须为0
因为: 更新实体字段的时候, 通过id来判断2个实体是否相同. id为0, 表示新建实体.
到此, 准备功能基本上完成.
这个时候, 你编译项目, 是不会通过的. 不要着急, 往下看!
MyObjectBox是啥?
注意,注意,注意!
- 你只有配置好之后, 点击
Make Project
, 才会创建MyObjectBox
对象- 对于
MyObjectBox
的包名
, 目前我发现的是找到第一个Entity的包名
- 如果项目使用了
Kotlin
, 必须添加插件apply plugin: 'kotlin-kapt'
- 实体
Entity
是不能继承的哦.继承的字段不会被解析
为了能够在应用程序同包名
下创建创建MyOBjectBox
, 可以在同包名下
创建一个空的Entity
这个文件是当你配置好工程之后, Make Project
后, 才会自动生成的类.
源码如下:
public class MyObjectBox {
public static BoxStoreBuilder builder() {
BoxStoreBuilder builder = new BoxStoreBuilder(getModel());
builder.entity(EntityLib_.__INSTANCE);
return builder;
}
private static byte[] getModel() {
ModelBuilder modelBuilder = new ModelBuilder();
modelBuilder.lastEntityId(1, 8258112711913012765L);
modelBuilder.lastIndexId(0, 0L);
modelBuilder.lastRelationId(0, 0L);
EntityBuilder entityBuilder;
entityBuilder = modelBuilder.entity("EntityLib");
entityBuilder.id(1, 8258112711913012765L).lastPropertyId(3, 2310992876644121780L);
entityBuilder.flags(io.objectbox.model.EntityFlags.USE_NO_ARG_CONSTRUCTOR);
entityBuilder.property("id", PropertyType.Long).id(1, 5097358843555284973L)
.flags(PropertyFlags.ID | PropertyFlags.NOT_NULL);
entityBuilder.property("name2", PropertyType.String).id(3, 2310992876644121780L);
entityBuilder.entityDone();
return modelBuilder.build();
}
}
从源码中, 可以看出, 此类包含了实体
信息.
所以必须使用MyObjectBox
初始化BoxStore
, 否则你会出现找不到实体的异常
.
也正因为需要使用自动生成的MyObjectBox
类, 所以在Library
中, 也是完全可以使用不同的数据库的.
但是需要注意数据库的文件名, 不要使用一致的哦
.完美.
其他基础操作, 还是官方文档的好.
增删改查
https://docs.objectbox.io/queries
Kotlin的支持
https://docs.objectbox.io/kotlin-support
等等
群内有各(pian)种(ni)各(jin)样(qun)
的大佬,等你来撩.
联系作者
请使用QQ扫码加群, 小伙伴们都在等着你哦!
关注我的公众号, 每天都能一起玩耍哦!