آشنایی با Realm بهترین دیتابیس اندرویدی ۲۰۱۶
اگر شما هم جزء ان دسته از برنامه نویسان هستید که جدید ترین کتابخانه ها و تکنولوژی های توسعه اپلیکیشن های اندروید ی را دنبال می کند پس احتمالاً نام Realm به گوشتان خورده است.
Realm یک دیتابیس بسیار سبک است که به راحتی می تواند کاربران هر دو کتابخانه معروف SQLite و ORM را به آسانی راضی کند که از این پس ازrealm در پروژه های اندرویدی خود استفاده نمایند.
Realm در مقایسه با SQLite بسیار سریع تر و دارای ویژگی های بسیار فراوان تر است از قبیل JSON support, a fluent API, data change notifications, and encryption support و تمام ویژگی هایی که زندگی را برای ما برنامه نویسان اندروید ساده تر می کند.
در این مقاله ما به شما سعی داریم که به شما راه اندازی و اساس realm را بیاموزیم. در این مقاله ما از نسخه Realm v0.84.1 استفاده می کنیم.
1- افزودن Realm به پروژه:
برای استفاده از این کتابخانه شما نیاز دارید تا دستور زیر را به compile dependency در ماژولapp در فایل bulid.gradle بیافزاید.
compile 'io.realm:realm-android:0.84.1'
۲- ایجاد یک Realm:
ایجاد این دیتابیس بسیار ساده تر از ایجاد SQLite است. برای ساخت یک new Realm شما می توانید method static Realm.getInstance را در درون Activity فراخوانی کنید.
Realm myRealm = Realm.getInstance(context);
اگر Realm.getInstance method را بدون استفاده از RealmConfiguration بگذرانید، در نتیجه یک فایل default.realm ساخته می شود.
اگر شما قصد دارید تا یک فایلRealm دیگر به اپلیکیشن خود بیافزاید حتما باید با استفاده از RealmConfiguration.Builder یک آبجکت ازRealm را با نام منحصر به فرد مد نظر خود ایجاد کنید.
Realm myOtherRealm = Realm.getInstance( new RealmConfiguration.Builder(context) .name("myOtherRealm.realm") .build() );
3- ایجاد یک RealmObject:
هر JavaBean می تواند درRealm ذخیره شود اگر فقط یک بار از کلاس RealmObject ارث بری کرده باشد. اگر برای شما سوال پیش آمده باشد که یک JavaBean چیست ، جواب بسیار ساده است. JavaBean یک کلاس جاوا هست که serializable می باشد که شامل یک constructor پیش فرض یک getter/setter برای متغییر های خود دارد.
public class Country extends RealmObject { private String name; private int population; public Country() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPopulation() { return population; } public void setPopulation(int population) { this.population = population; } }
اگر می خواهید یکی از متغیرهای RealmObject را به عنوان primary key قرار بدهید می توانید از annotation @Primarykey برای ان متغیر استفاده کنید. به مثال زیر دقت کنید.
@PrimaryKey private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; }
4- ایجاد Transaction:
خواندن اطلاعات ازRealm بسیار ساده است. اما خواهید دید که نوشتن اطلاعات در این دیتابیس کمی پیچیده تر است. در واقع Realm برنامه نویس را مجبور می کند که تمام دستور های اجرای برای نوشتن اطلاعات را در درون transaction ها بنویسد.
myRealm.beginTransaction(); // Create an object Country country1 = myRealm.createObject(Country.class); // Set its fields country1.setName("Norway"); country1.setPopulation(5165800); country1.setCode("NO"); myRealm.commitTransaction();
شاید شما هم متوجه شده باشید که country1 از constructor کلاس Country استفاده نکرده است. برای Realm برای ساخت یک instance از یک RealmObject این instance حتما باید با استفاده از متود createObject ایجاد شده باشد.
اگر می خواهید که از constructor استفاده کنید فراموش نکنید قبل از اینکه در transaction قرار بدهید از متود copyToRealm استفاده کنید.
// Create the object Country country2 = new Country(); country2.setName("Russia"); country2.setPopulation(146430430); country2.setCode("RU"); myRealm.beginTransaction(); Country copyOfCountry2 = myRealm.copyToRealm(country2); myRealm.commitTransaction();
۵- نوشتن Queries:
API های کهRealm برای ایجاد query پیشنهاد داده است بسیار روان و قابل درک است. برای ایجاد یک query باید از متود where که مرتبط با Realm object است و قرار دادن object از کلاس مورد نظر خود استفاده کرد. بعد از ایجاد Query برنامه نویس می تواند با استفاده از متود findAll تمامی نتیجه های حاصل از Qurey را با هم fetch کند که این متود یک Object از RealmResults را بر می گرداند.
RealmResults<Country> results1 = myRealm.where(Country.class).findAll(); for(Country c:results1) { Log.d("results1", c.getName()); } // Prints Norway, Russia
پیشنهاد های Realm شامل چندین متود با نام های مختلف است از قبیل beginWith,endWith,lesserThan و greaterThan که شما می توانید از این متود های برای فیلتر کردن نتیجه Qurey خود استفاده کنید.
برای مثال کد زیر به شما نشان میدهد که چگونه از میان اطلاعات خود در دیتابیس با استفاده از متود greaterThan برای fetch کردن خروجی آبجکت Country که population ان ها بالا تر از ۱۰۰ میلیون نفر باشد استفاده بکنید.
RealmResults<Country> results2 = myRealm.where(Country.class) .greaterThan("population", 100000000) .findAll(); // Gets only Russia
اگر می خواهید نتیجه Query خود را مرتب کنید می توانید از متود findAllSorted استفاده کنید. ک این ارگومان یک String مشخص که نام فیلدی است که می خواهید مرتب شود و یک Boolean مشخص برای دستور دادن مرتب سازی میگیرد و خروجی مد نظر را می هد. به مثال زیر دقت کنید:
// Sort by name, in descending order RealmResults<Country> results3 = myRealm.where(Country.class) .findAllSorted("name", false); // Gets Russia, Norway
نتیجه:
در این مقاله ما به شما آموزش دادیم که چگونه از این کتابخانه در پروژه اندرویدی خود استفاده کنید. شما دیدی که چقدر ایجاد دیتابیس Realm و ذخیره سازی دیتا در ان و query زدن در ان چقدر آسان است. در ادامه با تیم Zero to Hero همراه باشید تا ویژگی های خارق العاده بیشتری از این کتابخانه قدرتمند را به شما معرفی کنیم
مطالب زیر را حتما مطالعه کنید
آموزش Gradle – اهمیت Project Automation
درک مفهوم کدنویسی تمیز در اندروید
5 هک ساده برای کاهش سایز فایل APK
آشنایی با RecyclerView در اندروید
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
سلام خسته نباشید, من هنوز تفاوت بین myRealm.createObject(Country.class و Country country2 = new Country(); که برای ذخیره رکورد در دیتابیس استفاده میشن رو متوجه نشدم, میتونید یه توضیح کوچیک ازش بدین؟
سلام و درود
Country name = new Country() برای ساخت یک شی جدید از کلاس Country استفاده میشود. از طریق این شی میتوان به Property ها و Method های کلاس Country دسترسی پیدا کرد.
createObject نیز یک Method برای ساخت شی از جنس کلاس Country برای ارتباط با دیتابیس Realm است.
موفق باشید