程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(2)

Android 安卓超级强劲的轻量级数据库ObjectBox,快的飞起

发布于2021-06-14 09:36     阅读(352)     评论(0)     点赞(22)     收藏(5)


在这里插入图片描述


ObjectBox

ObjectBox是一个超快的面向对象数据库,相比于Sqlite,效率高了10倍左右



引入ObjectBox

在跟项目中的build.gradle中引入:

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

在app下的build.gradle头部引入

(有以下两种情况,看你项目中用的什么):

plugins {
    ...
    id 'io.objectbox'
}
apply plugin: 'io.objectbox'


简单的代码栗子

接下来将会讲解ObjectBox基本使用



生成和创建数据库

1、新建一个模型类,并使用 @Entity 将类注解,@Id 为自增主键(进阶的代码栗子会详细一点讲注解),@Id 注解也是必不可少的。

package com.mt.objectboxproject

import io.objectbox.annotation.Entity
import io.objectbox.annotation.Id

@Entity
data class Person(
    @Id
    var id: Long = 0,
    var age: Int = 0,
    var name: String? = null
)

2、AndroidStudio操作:Build -> MakeProject,或者点击运行按钮旁边的小锤子锤一下,这一步是为了生成ObjectBox所需要的文件,之后便会看到生成了 app\objectbox-models\default.json 文件



ObjectBox初始化

1、创建ObjectBox的小助手,需要在 Application 中进行调用 init 初始化

package com.mt.objectboxproject

import android.content.Context
import io.objectbox.BoxStore

/**
 * ObjectBox的小助手,需要在Application中进行调用init初始化
 */
object ObjectBox {
    lateinit var store: BoxStore
        private set

    fun init(context: Context) {
        store = MyObjectBox.builder()
            .androidContext(context.applicationContext)
            .build()
    }
}

2、在 Application 中初始化

package com.mt.objectboxproject

import android.app.Application

class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        
        //初始化ObjectBox
        ObjectBox.init(this)
    }
}

基本操作 - 增

package com.mt.objectboxproject

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //插入一条数据
        val userBox = ObjectBox.store.boxFor(Person::class.java)
        val person =  Person()
        person.age  = 21
        person.name = "第三女神程忆难"
        userBox.put(person)

        //==========================================================================================

        //插入多条数据
        val persons = mutableListOf<Person>()

        //模拟多条数据
        val person1 = Person()
        person1.age = 24
        person1.name = "1bit"

        val person2 = Person()
        person2.age = 25
        person2.name = "梦想橡皮擦"

        val person3 = Person()
        person3.age = 26
        person3.name = "沉默王二"

        persons.add(person1)
        persons.add(person2)
        persons.add(person3)

        //插入数据库
        userBox.put(persons)


    }
}

基本操作 - 查

package com.mt.objectboxproject

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val userBox = ObjectBox.store.boxFor(Person::class.java)

        //==========================================================================================
        //根据主键id查询
        val person = userBox[1]

        //==========================================================================================
        //获取person有所数据
        val allPersons = userBox.all

        //==========================================================================================
        //条件查询
        val build = userBox.query()
            .equal(Person_.name, "沉默王二")
            .order(Person_.name)
            .build()

        //查找数据
        val find = build.find()

        //记得close
        build.close()

    }
}

基本操作 - 删

package com.mt.objectboxproject

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val userBox = ObjectBox.store.boxFor(Person::class.java)

        //==========================================================================================
        //根据主键Id去删除
        val isRemoved = userBox.remove(1)

        //==========================================================================================
        //根据主键id集合去删除
        val ids = mutableListOf<Long>(1,2,3,4)
        userBox.removeByIds(ids)

        //==========================================================================================
        //根据模型类去删除
        val person = userBox[1]
        person.name = "第三女神程忆难"
        userBox.remove(person)
        
        //==========================================================================================
        //删除所有数据
        userBox.removeAll()

    }
}

基本操作 - 改

package com.mt.objectboxproject

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val userBox = ObjectBox.store.boxFor(Person::class.java)

        //==========================================================================================
        //先查询获取到person,set值后重新put
        val person = userBox[1]
        person.name = "小傅哥"
        userBox.put(person)
    }
}


进阶的代码栗子

注解讲解



注解

  • @Id:主键,默认为自增主键,交由ObjectBox管理
  • @Index:注释一个属性,为相应的数据库列创建一个数据库索引。这可以提高查询该属性时的性能。
  • @Transient:标记不应保留的属性。在 Java 中,静态或瞬态属性也不会被持久化。
  • @NameInDb:对数据库中字段名进行自定义。
  • @Backlink:反向关联。
  • @ToOne:一对一关联注解。
  • @ToMany:一对多关联注解。

文档

ObjectBox:https://docs.objectbox.io

原文链接:https://blog.csdn.net/qq_40881680/article/details/117610179



所属网站分类: 技术文章 > 博客

作者:想要飞翔的天使

链接:http://www.javaheidong.com/blog/article/222602/e96e5e98b23c968c78e6/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)