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()