参考链接
- 超快 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清单文件添加权限
图片一:最外层PaintsDao
图片二:Author类
图片三:Images类
@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对象,如果生成不成功那么请看你的配置是否有问题。
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⊙)!
Box
paintsDaoBox = MyAppLocation.getInstence().getBoxStore().boxFor(PaintsDao.class); PaintsDao paintsDao = new PaintsDao(); paintsDao.images.setTarget(images1); paintsDao.author.setTarget(author1); paintsDaoBox.put(paintsDao);
paintsDaoBox.remove(paintsDao); //该参数可以传要删除的实体,也可以传入要删除的实体的id,可以批量传入
List
all = paintsDaoBox.getAll();
PaintsDao paintsDao = new PaintsDao(); paintsDao.setImgName(mListPaints.get(i).getName()); //修改对应的属性值后 paintsDaoBox.put(paintsDao); //调用put方法插入到数据库。
PaintsDao paintsDao = new PaintsDao(); //最外层
Images images1 = new Images();
images1.setLarge(images.getLarge());
paintsDao.images.setTarget(images1); //设置一对一的target对象,字段参见以上示例
paintsDaoBox.put(paintsDao);
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以上了)!