初识ObjectBox--Android平台

官网:https://objectbox.io/

github:https://github.com/objectbox

介绍:ObjectBox是一个超快的面向对象数据库,专为物联网和移动设备而构建。我们为小型设备提供边缘计算,允许在本地存储和处理数据,以实现高效,快速和安全的数据管理。ObjectBox小于1MB,因此它是移动应用程序,小型物联网设备和物联网网关的理想解决方案。我们是第一个高性能的NoSQL,符合ACID的设备边缘数据库。我们所有的产品都是在开发人员的基础上构建的,因此它们易于使用并且需要最少的代码来实现。

支持语言:java,c/c++,go,swift,kotlin

基本涵盖了所有平台

此文主要供 Java使用ObjectBox

kotlin版本:https://docs.objectbox.io/kotlin-support

 

环境搭建:

1.b1fd24f6b5765f46a7cd3e6dd76d951504f.jpg

目前最新版本:2.3.3 (2019/3/9)

2,在app.build中添加插件

apply plugin: 'io.objectbox'

9260d11aacef053d281c37cfba02f236a9e.jpg

3.初始化ObjectBox(一般建议在Appliction初始化),在初始化之前我们先要建立ObjectBox所需的实体类(这是个坑,不建立则没办法初始化)

 

4.建立实体类

//序列化实体类 Entity必加
@Entity
public class LoginBean {

    //id字段是必要的字段,不可忽略,不可用修饰符修饰
    @Id
    long uid;

    //索引,查询大量数据可加快查询速度
    @Index
    String loginName;

    //存储数据 可看做表字段
    String passWord;


    public String getLoginName() {
        return loginName;
    }

    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}

 

添加完实体类 build下程序,ObjectBox生成初始化所需要的类

10ba337e04d3f1ba846ab1009484398a355.jpg

 

5.初始化ObjectBox

public class ObjectBox {

    private static BoxStore boxStore;

    public static void init(Context context){

        boxStore = MyObjectBox.builder().androidContext(context).build();
    }

    public static BoxStore getBoxStore() {
        return boxStore;
    }

}

 

public class MyApplication extends Application {


    @Override
    public void onCreate() {
        super.onCreate();
        ObjectBox.init(this);
    }

}

6.添加/更新数据(如果当前添加的数据存在则更新数据,否则就添加)

box.put(object);

7.删除/删除所有数据

box.remove(object);
box.removeAll();

8.简单的条件查询

box.get(long id);

9.查询所有数据

box.getAll();

10:工具类

public class ObjectBoxUtils {



    /**
     * 添加数据
     * */
    public static <T> void addData(Object o, Class c){

        Box<T> box= ObjectBox.getBoxStore().boxFor(c);


        box.put((T) o);

    }


    /***
     * 获取指定查询数据
     * */
    public static <T> T getConditionsData(Class clazz,String key){

        Field[] fs = clazz.getDeclaredFields();

        for (int i = 0; i < fs.length; i++){
            Field f = fs[i];
            f.setAccessible(true);

            if (f.getName().endsWith(key)) {
                try {
                    long id = (long) f.get(clazz);
                    Box<T> box= ObjectBox.getBoxStore().boxFor(clazz);
                    return box.get(id);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }


        return null;

    }


    public static  <T> List<T> getAllData(Class clazz){

        Box<T> box= ObjectBox.getBoxStore().boxFor(clazz);

        return box.getAll();
    }



    //删除数据
    public static <T> void deleteData(Object o,Class clazz){

        Box <T> box= ObjectBox.getBoxStore().boxFor(clazz);

        box.remove((T) o);

    }


    /**
     * 删除数据
     * */
    public static <T>  void removeAllData(Class clazz){

        Box <T> box= ObjectBox.getBoxStore().boxFor(clazz);
        box.removeAll();
    }



}

11简单的一个demo

Activity:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText loginName,passWord;
    private TextView content;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.login).setOnClickListener(this);
        //获取所有数据
        findViewById(R.id.getAll).setOnClickListener(this);
        //更新数据
        findViewById(R.id.update).setOnClickListener(this);
        //删除数据
        findViewById(R.id.delete).setOnClickListener(this);
        //删除所有数据
        findViewById(R.id.deleteAll).setOnClickListener(this);
        content = findViewById(R.id.content);
        loginName = findViewById(R.id.loginName);
        passWord = findViewById(R.id.passWord);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.login:
                if (TextUtils.isEmpty(loginName.getText().toString())){
                    Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
                }
                else if (TextUtils.isEmpty(passWord.getText().toString())){
                    Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
                }
                else {

                    LoginBean loginBean = new LoginBean();
                    loginBean.setLoginName(loginName.getText().toString());
                    loginBean.setPassWord(passWord.getText().toString());
                    ObjectBoxUtils.addData(loginBean,LoginBean.class);
                    Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show();
                }

                break;

            case R.id.getAll:
                getLoginInfo();
                break;

            case R.id.update:
                LoginBean loginBean = new LoginBean();
                loginBean.uid = 1;
                loginBean.setLoginName("张三");
                loginBean.setPassWord("1234qwer");
                upData(loginBean);
                break;

            case R.id.delete:
                LoginBean delete = new LoginBean();
                delete.uid = 1;
                ObjectBoxUtils.deleteData(delete,LoginBean.class);
                break;
            case R.id.deleteAll:
                ObjectBoxUtils.removeAllData(LoginBean.class);
                break;
        }
    }

    private void getLoginInfo(){
        List<LoginBean> beanList = ObjectBoxUtils.getAllData(LoginBean.class);
        StringBuffer buffer = new StringBuffer();
        if (!beanList.isEmpty()){
            for (LoginBean loginBean : beanList){

                buffer.append("loginName:").append(loginBean.getLoginName()).append("\n");
                buffer.append("password:").append(loginBean.getPassWord()).append("\n");

                Log.e("uid",loginBean.uid +"");
                Log.e("loginName",loginBean.getLoginName());

                Log.e("password",loginBean.getPassWord());
            }

        }
        else {
            buffer.append("暂无数据");
        }

        content.setText(buffer.toString());
    }

    private void upData(LoginBean loginBean){
        ObjectBoxUtils.addData(loginBean,LoginBean.class);
    }
}

 

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">


            <EditText
                android:id="@+id/loginName"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:hint="请输入用户名"/>


            <EditText
                android:id="@+id/passWord"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:hint="请输入密码"/>


            <Button
                android:id="@+id/login"
                android:layout_width="match_parent"
                android:layout_margin="10dp"
                android:layout_height="60dp"
                android:text="登录"/>


            <Button
                android:id="@+id/getAll"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:text="获取所有数据"/>


            <Button
                android:id="@+id/update"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:text="更新id为1的数据"/>

            <Button
                android:id="@+id/delete"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:text="删除id为1的数据"/>


            <Button
                android:id="@+id/deleteAll"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                android:layout_margin="10dp"
                android:text="删除所有数据"/>




            <TextView
                android:id="@+id/content"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/colorAccent"
                android:textColor="@android:color/white"
                android:layout_margin="20dp"/>


        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>





</LinearLayout>

 

 

注意:记得在manifests添加Appliction

转载于:https://my.oschina.net/u/2355512/blog/3020181

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值