ObjectBox初体验

项目之前的数据库是SQLite封装的,各种语句全部手打,很麻烦,于是决定使用ObjectBox换掉它。ObjectBox优点挺多的,对象化操作和速度快是两个突出优点,还有链式操作。下面就贴一些经验:

 

1 环境和初始化
build.gradle(:Project):

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

       
// NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
   
}
}

 

 

build.gradle(:Module):

apply plugin: 'io.objectbox'

 

先建立一个bean类:

@Entity

public class Action {



    @Id

    public long id;



    @Index

    public String actionName;



}

 

初次运行,先rebuild下Project

然后在Application中初始化BoxStore

@SuppressLint("Registered")

public class TestApplication extends Application {



    private BoxStore boxStore;

    @Override

    public void onCreate() {

        super.onCreate();

        boxStore = MyObjectBox.builder().androidContext(this).build();

    }



    public BoxStore getBoxStore(){

        if (boxStore == null){

            boxStore = MyObjectBox.builder().androidContext(TestApplication.this).build();

        }

        return boxStore;

    }

}

 

添加Application到Mainifast

建一个Dao类

public class ActionDao {

    private Box<Action> mBox;

    public ActionDao(Context context){

        Activity activity = (Activity) context;

        BoxStore mBoxStore = ((TestApplication)activity.getApplication()).getBoxStore();

        mBox = mBoxStore.boxFor(Action.class);

    }



    public void insertAction(Action action){

        mBox.put(action);

    }



    public void insertActions(Action... actions){

        mBox.put(actions);

    }



    public void insertActions(List<Action> actionList){

        mBox.put(actionList);

    }



    public void removeAction(Action action){

        mBox.remove(action);

    }



    public void removeAction(long id){

        mBox.remove(id);

    }



    public void removeActions(long... ids){

        mBox.remove(ids);

    }



    public void removeActions(Action... actions){

        mBox.remove(actions);

    }



    public void removeAction(List<Action> actionList){

        mBox.remove(actionList);

    }



    public List<Action> listActionList(){

        return mBox.query().build().find();

    }



}

 

然后就可以愉快的使用ObjectBox了。

 

优点:速度很快,以对象访问的方式操作数据库等

 

还可以使用事务线程并发执行数据库操作:

public void insertRepairRecord(final List<RepairRecord> recordList){

    final String userName = User.getInstance().getUsername();

    //run in io thread

    mBoxStore.runInTx(new Runnable() {

        @Override

        public void run() {

            for (RepairRecord record : recordList) {

                record.username = userName;

                mBox.put(record);

            }

        }

    });

}

 

排序可以自定义:

public List<RepairRecord> getAllRepairRecords(){

    return mBox.query().equal(RepairRecord_.username, User.getInstance().getUsername()).sort(new Comparator<RepairRecord>() {

        @Override

        public int compare(RepairRecord lhs, RepairRecord rhs) {

            return (int) (Long.valueOf(rhs.recordId) - Long.valueOf(lhs.recordId));

        }

    }).build().find();

}

这个是左边的大排在前面,即为倒序排列。

如果是orderId之类的,可以直接用order(propertyId, flag)的方式进行排序。

 

需要更新数据库时,先添加@Uid到相应字段或者entity,在Android studio Terminal执行

gradlew compileDebugSources命令,得到:

错误: [ObjectBox] UID operations for property "RepairRecord.startTime": [Rename] apply the current UID using @Uid(931909563942654566L) - [Change/reset] apply a new UID using @Uid(4949719973782941075L)

把@Uid(4949719973782941075L)填上,更改名字或者类型就不会报错了。

 

2 query官方文档:

http://objectbox.io/documentation/queries/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值