ObjectBox数据库操作总结

objectbox基础

参考链接

  • 官网地址 https://docs.objectbox.io/
  • github地址 https://github.com/objectbox/objectbox-java
  • 我的其他文章 https://me.csdn.net/lj_18210158431

一: objectbox特性。

  • 超快 objectbox优于测试过的所有嵌入式数据库
  • 面向对象的api 没有ORM,没有SQLite,简洁的api
  • 自动升级 可以直接在对象上进行删除修改等操作
    其它参考官网介绍

二:如何配置及使用? 

佳姝1:在根目录build.gradle添加对应引用

buildscript {
    ext.objectboxVersion = '2.3.4'                                       
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.1'
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}
allprojects {
    repositories {
        jcenter()
    }
}

佳姝2:在app的 build.gradle文件添加引用

apply plugin: 'com.android.application'
apply plugin: 'io.objectbox'
dependencies {
    implementation "io.objectbox:objectbox-android:$objectboxVersion"
    annotationProcessor "io.objectbox:objectbox-processor:$objectboxVersion"

}

佳姝3清单文件添加权限 






三:定义要保存在数据库中的对象 。

     ObjectBox数据库操作总结_第1张图片

                           图片一:最外层PaintsDao

    ObjectBox数据库操作总结_第2张图片

                          图片二:Author类

      ObjectBox数据库操作总结_第3张图片

                              图片三:Images类

ObjectBox注解介绍:

@Entity:这个对象需要持久化

@Id:这个对象的主键,默认情况下,id是会被objectbox管理的,也就是自增id,如果你想手动管理id需要在注解的时候加上@Id(assignable = true)即可。当你在自己管理id的时候如果超过long的最大值,objectbox 会报错.id的值不能为负数。当id等于0时objectbox会认为这是一个新的实体对象,因此会新增到数据库表中

@Index:这个对象中的索引。对经常大量进行查询的字段创建索引,会提高你的查询性能

@Transient:如果你有某个字段不想被持久化,临时属性,可以使用此注解,那么该字段将不会保存到数据库

@NameInDb:有的时候数据库中的字段跟你的对象字段不匹配的时候,存储在数据库中的列名称,可以使用此注解。

@ToOne:一对一的关联注解,如表示一张学生表(Student)关联一张班级表(Class),此外还有一对多,多对多的关联。

@ToMany:一对多的关联注解,如表示一张班级表(Class)关联多张学生表(Student)

@Backlink:表示反向关联

添加完成对象后,编译项目,会自动生成MyObjectBox对象,如果生成不成功那么请看你的配置是否有问题。

四:在Application中初始化MyObjectBox对象。

public class MyAppLocation extends Application {
    private static MyAppLocation myAppLocation;
    private        BoxStore      boxStore;

    @Override
    public void onCreate() {
        super.onCreate();
        myAppLocation = this;
        this.initializeObjectBox();
        this.initializeOrhanobut();
    }

    private void initializeOrhanobut() {
        Hawk.init(this).build();
        VLog.initialize()
                .hideThreadInfo()
                .logTool(new AndroidLogTool())
                .logLevel(BuildConfig.DEBUG ? LogLevel.FULL : LogLevel.NONE);
    }

    private void initializeObjectBox() {
        boxStore = MyObjectBox.builder().androidContext(this).build();
    }

    public BoxStore getBoxStore() {
        return boxStore;
    }

    public static MyAppLocation getInstence() {
        return myAppLocation;
    }
}

  注:记得在AndroidManifest.xml清单文件注册哦(⊙o⊙)!

五:增删改查及表关系如何操作。

put:插入存数据

Box paintsDaoBox = MyAppLocation.getInstence().getBoxStore().boxFor(PaintsDao.class); 
PaintsDao paintsDao = new PaintsDao(); 
paintsDao.images.setTarget(images1); 
paintsDao.author.setTarget(author1); 
paintsDaoBox.put(paintsDao);

remove:删除数据

paintsDaoBox.remove(paintsDao);  //该参数可以传要删除的实体,也可以传入要删除的实体的id,可以批量传入

get:查询取数据 

List all = paintsDaoBox.getAll();

 修改数据,首先得到要修改的实体类

PaintsDao paintsDao = new PaintsDao();
paintsDao.setImgName(mListPaints.get(i).getName());    //修改对应的属性值后
paintsDaoBox.put(paintsDao);    //调用put方法插入到数据库。

 表关系:
@ToOne一对一

PaintsDao paintsDao = new PaintsDao();     //最外层
Images images1 = new Images();
images1.setLarge(images.getLarge()); 
paintsDao.images.setTarget(images1);        //设置一对一的target对象,字段参见以上示例
paintsDaoBox.put(paintsDao);

 @ToMany一对多

List mListPaints;

mListPaints =(List) intent.getSerializableExtra("paints");
Box paintsDaoBox = MyAppLocation.getInstence().getBoxStore().boxFor(PaintsDao.class);
if (mListPaints != null) {
    for (int i = 0; i < mListPaints.size(); i++) {
        Paints.ResultDataBean.ListBean.ImagesBean images = mListPaints.get(i).getImages();
        Images images1 = new Images();
        images1.setLarge(images.getLarge());
        images1.setMedium(images.getMedium());
        images1.setSmall(images.getSmall());

        Paints.ResultDataBean.ListBean.AuthorBean author = mListPaints.get(i).getAuthor();
        Author author1 = new Author();
        author1.setFirstName(author.getFirstname());
        author1.setUesrId(author.getId());
        author1.setLastName(author.getLastname());
        author1.setUserName(author.getUsername());

        PaintsDao paintsDao = new PaintsDao();
        paintsDao.images.setTarget(images1);
        paintsDao.author.setTarget(author1);
        paintsDao.setImgName(mListPaints.get(i).getName());
        paintsDao.setIntroduction(mListPaints.get(i).getIntroduction());
        paintsDao.setGmt_created(mListPaints.get(i).getGmt_created());

        paintsDaoBox.put(paintsDao);

    }
}

六:遇到的问题。

1.上面的配置一定要配置正确一个都不能少,不然会Build不成功或成功后显示你本该有的数据put进去为空!

2.无法生成MyObjectBox.class
如果你按照之前的操作发现还是不能正常生成,检查你的Gradle构建文件,android-apt插件在新版Gradle已经被弃用,将Gradle升级到最新版即可.(注:“com.android.tools.build:gradle:2.3.3”已经算是老的版本了,现在至少是3.0以上了)!

 

 

你可能感兴趣的:(佳姝文章,佳姝错误集)