Android数据库之objectbox的使用
添加依赖:
1.在APP的build.gradle 中dependencies 中添加
releaseImplementation 'io.objectbox:objectbox-android:2.2.0'
2.在APP的build.gradle 中dependencies配置,注意需要放最后面
apply plugin: 'io.objectbox' // 放最后面
3.在工程根目录的build.gradle文件的dependencies中添加
classpath "io.objectbox:objectbox-gradle-plugin:2.2.0"
此时环境搭建好了。是不是很简单?啧啧啧
初始化:
ObjectBox与其他DB库不同,不会为每个实体生成单独的DAO类,而是用一套模板进行访问。
对实体类进行存取的操作需要用到支持泛型的Box。每个实体类的Box需要使用BoxStore的boxFor方法获取。整个应用保持一个BoxStore的引用就好,通常在Application中进行初始化
public class MainApplication extends Application {
private BoxStore boxStore;
private static MainApplication application;
@Override
public void onCreate() {
super.onCreate();
application = this;
boxStore=MyObjectBox.builder().androidContext(this).build();
}
public static MainApplication getContext() {
return application;
}
public BoxStore getBoxStore() {
return boxStore;
}
}
简单使用:泛型T为保存数据的实体类
public class BlogDao {
public static <T> Box<T> getBox(Class<T> t) {
//根据某个实体类获取Box对象
return MainApplication.getContext().getBoxStore().boxFor(t);
}
}
实体类:
@Entity
public class TakePhoto {
@Id
private long takeId;
public long getTakeId() {
return takeId;
}
public void setTakeId(long takeId) {
this.takeId = takeId;
}
增/改:
若当前ID存在,进行更改,若不存在,则增加数据
BlogDao.getBox(TakePhoto.class).put(takePhoto);
删:
BlogDao.getBox(TakePhoto.class).remove(takePhoto.getTakeId());
查:
BlogDao.getBox(TakePhoto.class).query().build().find();
关系:如TakePhoto下有多个TakePhotoPaths。
一对一写法:
public ToOne<TakePhotoPath> paths;
一对多写法:
注意:如某TakePhoto有多个TakePhtotPath,不可写List<TakePhotoPath>。
写法如下:
@Backlink
public ToMany<TakePhotoPath> paths;
public ToOne<TakePhoto> photo;
多对多写法:
public ToMany<TakePhotoPath> paths;
注意:
坑1:
MyObjectBox找不到,需要添加实体类并注解Entity
并且Clean Project ,Rebuild Project。
坑2:
还是找不到,检查实体类的成员变量的语法是否写错,或注解写错。