سلام ObjectBox خداحافظ SQLite

آبجکت باکس یه کتابخونه برای اندروید(پلفترم های دیگ) هست که دیتا بیس داخلی رو برای شما فراهم میکنه مزیت هایی که داره اینه که خییلی سریعه به گفته سازنده اش ده برابر سریع تر از دیتابیس های قبلی هست و بعدیش این هست که خیلی آسون میشه استفاده کرد درواقع شما دردسر های sqlite رو ندارید که query بزنید یا با cursor دیتا هارو بخونید راحت همه جا بهش دسترسی داشته باشید نکته بعدی اینه خودش با javaRx یک observer برای هر تیبل داره که اگر خاستید میتونین استفاده کنین و دیگ بترکونین!!

https://docs.objectbox.io/getting-started

میتونین اینجا خیلی راحت استفاده ازش رو شروع کنین اما منم مختصر کمکتون میکنم

خب اول از همه توی فایل (build.gradle (project این کد هارو اضافه کنید




buildscript {
ext.objectboxVersion = '2.3.4'
repositories {
jcenter()
}
dependencies {
// Android Gradle Plugin 3.0.0 or later supported
classpath 'com.android.tools.build:gradle:3.3.2'
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
}
}



و در آخر هم توی فایل (build.gradle (App بعد از کد اندروید این خط رو اضافه کنید(آخرین خط)

applyplugin:'io.objectbox'

خب حالا یه بار پروژه رو سینک کنید و تموم!

اگر خاستید از کاتلین استفاده کنین قبل از خط آبجتک باکس این دو خط هم اضافه کنید

apply plugin: 'kotlin-android' // if using Kotlin
apply plugin: 'kotlin-kapt' // if using Kotlin

اضافه کردن این کتابخونه تموم شد

حالا چطوری ازش استفاده کنیم؟ خب این هم توی لینکی که گزاشتم نوشته ولی بد نیست مختصر بگیم چطور ازش استفاده کنین شما اول باید یک کلاس که از Application ارث برده بسازید و توی فایل manifest این کلاس رو معرفی کنید

<application
        android:name=".App"
        android:allowBackup="true"
        android:[email protected]/ic_launcher"
        android:[email protected]/app_name"
        android:[email protected]/ic_launcher_round"
        android:supportsRtl="true"
        android:[email protected]/AppTheme">

توی اینجا اسم کلاس اپلیکیشن من App بوده ولی هرچیزی میتونه باشه


حالا توی کلاس اپ چه کار میکنیم؟ خب اپ اینطوریه که با شروع برنامه یه نمونه ازش ساخته میشه و تا بسته نشدن همه چی این نمونه از بین نمیره پس بهترین جا برای ستاپ کردن دیتا بیسمون هست


public class App extends Application {
    private BoxStore boxStore;


    @Override
    public void onCreate() {
        super.onCreate();
     MyObjectBox.builder().androidContext(getApplicationContext()).build();
    }
    public BoxStore getBoxStore() {
        return boxStore;
    }
}

خب همونطور که میبینید خیلی سادس

باکس استور جایی هست که همه دیتابیس ها میرن اونتو درواقع بهش برای گرفتن دیتا نیاز داریم

اول متد onCreate رو override میکنید و بعد اون یک خط رو مینویسید فقط یادتون باشه باید یک getter برای باکس استور داشته باشید فعلا تا اینجا صبر کنید تا بگم چطور یه تیبل اضافه کنید و بعد استفاده رو میگم

همونطور که توی خود سایتش گفته و منم از اونجا بهتون میگم به این کد نگاه کنید

// User.java
@Entity
public class User {
@Id public long id;
public String name;
}

خط اول که یک انوتیشن هست میگه این یک تیبل هست و خط سوم میگه این پراپرتی آی دی هست بعدش هرچی خاستید اضافه کنید و به همین راحتی یه تیبل ساختید


خب حالا گرفتن دیتا

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
//گرفتن دیتا بیس
        BoxStore boxStore = ((App)getApplication).getBoxStore();
//گرفتن تیبل از دیتا بیس
        Box<User> userBox = boxStore.boxFore(User.class);
  //گرفتن دیتا از تیبل
      ArrayList<User> users = userBox.getAll();
}

کلاس اپ که گفتیم همون اول ساخته میشه اینجاس دروافع همه اگتیویتی ها به اپ دسترسی دارن اما نمیدونن ما اپ کاستوم خودمون رو گزاشتیم جای دیفالت پس باید اول کستش کنیم به اپ خودمون تا به باکس استور دسترسی داشته باشیم( اگر کست نکنین دسترسی ندارید)

بعدی هم برای گرفتن یه تیبل خیلی راحت یه نمونه ازش میسازیم و با متد boxFore اون رو برای کلاس یوزر میگیریم

آخر هم که معلومه گفتیم همه دیتا رو بگیر اما میتونین کویری هم بزنین مثلا کسایی که اسمشون محمد هست

به این صورت:


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
BoxStore boxStore = ((App)getApplication).getBoxStore();
Box<User> userBox = boxStore.boxFore(User.class);
ArrayList<User> users = box.query().equal(User_.name,"Mohammad").build().find();
}


خب با متد کویری میگید که میخام دیتا فیلتر بشه بعد از متد equal استفاده میکنید که اول یک پراپرتی میگیره بعد یک مقدار که بر اساسش فیلتر کنه اگر دقت کنین کلاس User یک آندرلاین نداره ولی آبجکت باکس یک کلاس خودش میسازه که آندرلاین داره شما برای کویری زدن باید از اون استفاده کنین وگرنه کار نمیکنه


راستی هنوز نگفتیم چطور دیتا وارد کنید /:

کدش این

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      BoxStore boxStore = ((App)getApplication).getBoxStore();  
      Box<User> userBox = boxStore.boxFore(User.class);     
      User user = new User();
      user.name = "Mohammad"
      userBox.put(user);
    }

با متد put میتونید یک یوزر جدید وارد کنید

برای ادیت کردن هم از put باید استفاده کنید ینی اگر آی دی یوزر 3 باشه و یوزر 3 موجود باشه این جدیده رو میزاری جای قدیمیه

برای حذف کردن هم از متد remove استفاده میکنید که یا میتونین آیدی بدید بهش یا خود دیتا مودل یا یک لیستی از چیز هایی که میخاید حذف کنید


خیلی طولانی شد ببخشید اما خیلی کار های خفن این آبجکت باکس مونده توی سایت موجود هست اگر هم خاستید توی قسمت بعدی پیشرفته تر توضیح میدم.

امید وارم همیشه شاد باشید.