数据库ObjectBox

1,395 阅读2分钟

objectbox数据库简介

objectbox数据库是greenrobot团队开发的全新非关系型数据库框架,该团队还开发过greenDao,EventBus等热门框架,可谓实力雄厚。按照官方介绍,该库有如下特点:

  • 超快速:号称胜过测试过的所有嵌入式数据库
  • 面向对象的 API: 没有 rows、columns 和 SQL,完全从0开始的对象(没有ORM,没有SQLite)
  • 反应性:对数据变化的反应简单而强大,使用ObjectBox中的反应数据观察器或与RxJava集成。
  • 多平台:已经支持安卓和java,ios和MacOs正在集成
  • 简单的线程:ObjectBox返回的对象可以在所以线程中运行
  • 数据库的升级不再需要我们自己管理版本号,ObjectBox内部会自动帮我们管理(ObjectBox负责添加,删除和重命名属性的新对象版本)

配置

1.Add this to your root build.gradle (project level):

buildscript {
    ext.objectboxVersion = '2.2.0'
    dependencies {
        classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
    }
}

2.And this to our app's build.gradle (module level):

apply plugin: 'io.objectbox' // after applying Android plugin
dependencies { 
 debugImplementation"io.objectbox:objectbox-android-objectbrowser:$objectboxVersion"
 releaseImplementation"io.objectbox:objectbox-android:$objectboxVersion"
}

3.使用

  • 创建实体类
import io.objectbox.annotation.Entity
import io.objectbox.annotation.Id

@Entity
class UserInfo {

    /**
     * id : 1
     * nickname : 张三
     * sex : 30
     */
    
    @Id(assignable = true)
    var id: Long = 1
    var nickname: String? = null
    var sex: Int = 0
    constructor(
        id: Long,
        nickname: String?,
        sex: Int,
    ) {
        this.id = id
        this.nickname = nickname
        this.sex = sex
    }

    constructor()
}
  • 数据库操作统一管理类
import io.objectbox.Box;
import io.objectbox.BoxStore;

public class ObjectBoxDataManager {
    private static ObjectBoxDataManager objectBoxDataManager;
    public BoxStore boxStore;
    public Box userInfoBox;

    /**
     * 初始化数据库
     * @param application
     */
    public void init(Application application) {
        boxStore = MyObjectBox.builder().androidContext(application).build();
        initUserInfoBox();
    }

    public static synchronized ObjectBoxDataManager getInstance() {
        if (objectBoxDataManager == null) {
            objectBoxDataManager = new ObjectBoxDataManager();
        }
        return objectBoxDataManager;
    }

    private void initUserInfoBox() {
        //对应操作对应表的类
        userInfoBox = boxStore.boxFor(UserInfo.class);
    }

    /**
     * 新增
     * @param userInfo
     */
    public void insertUserInfo(UserInfo userInfo) {
        userInfoBox.removeAll();
        userInfoBox.put(userInfo);
    }

    /**
     * 删除
     */
    public void clearUserInfo() {
        userInfoBox.removeAll();
    }
    
    /**
     * 改
     * @param userInfo
     */
    public void updateUserInfo(UserInfo userInfo) {
        List<UserInfo> list = userInfoBox.query().build().find();
        if (list!=null&&!list.isEmpty()){
            int pos=-1;
            UserInfo bean;
            for (int i = 0; i <list.size() ; i++) {
                 bean=list.get(i);
                if (bean.getId()==userInfo.getId()){
                    pos=i;
                }
            }
            if (pos==-1){
                insertUserInfo(userInfo);
            }else {
                userInfoBox.remove(list.get(pos));
                userInfoBox.put(userInfo);
            }
        }
    }

    /**
     * 查询
     * @return
     */
    public UserInfo queryUserInfo() {
        return (UserInfo) userInfoBox.query().build().findUnique();
    }

}
  • 数据库统一操作管理类初始化(Application)
 ObjectBoxDataManager.getInstance().init(this)
  • 增删改查
//增
var userInfo= UserInfo()
userInfo.nickname="张三"
userInfo.sex=30
ObjectBoxDataManager.getInstance().insertUserInfo(userInfo)
//删
ObjectBoxDataManager.getInstance().clearUserInfo()
//改
ObjectBoxDataManager.getInstance().updateUserInfo(userInfo)
//查
var queryUserInfo = ObjectBoxDataManager.getInstance().queryUserInfo()