room چیست؟
همانطور که در مقاله انواع دیتابیس ها به معرفی دیتابیس ها پرداخته شد، SQLite یکی از آن پایگاه داده های معرفی شده است که به عنوان کتابخانه اصلی در سیستم عامل اندروید (Android) به حساب می آید. SQLite در توسعه برنامه های اندروید مورد استفاده قرار می گیرد و شاید برای شما نیز سوال باشد که SQLite چگونه برنامه های اندروید را توسعه می دهد؟ در جواب این سوال لازم است بگوییم که دیتابیس SQLite توسط ابزاری به نام room این کار را انجام می دهد. شما به وسیله این مقاله به راحتی می توانید با room آشنا شوید و جواب سوال های خود را بدست آورید.
آنچه در این مقاله می آموزید:
ToggleRoom چیست؟
Room یک object relational mapper) ORM) می باشد که برای پایگاه داده SQLite در اندروید طراحی و تولید شده است و به وسیله گوگل منتشر گردیده است. زمانی که کدهای خود را در Room می نویسید، آن کدها به کدهای SQLite تبدیل می شوند. Room باعث افزایش سرعت ایجاد پایگاه داده در اندروید می شود. Room به صورت یک لایه انتزاعی بر روی پایگاه داده داخلی SQLite عمل می کند.
ORM چیست؟
ORM مخفف عبارت Object-Relational Mapping می باشد که به عنوان یک روش در زبان های backend مثل c# یا جاوا به حساب می آید و استفاده می شود. برای هر زبان Orm مخصوص آن زبان وجود دارد که Orm معروف زبان سی شارپ، enitiy framework می باشد که در سال ۲۰۱۸ معرفی شده است. در روش های قدیمی دسترسی به دیتابیس باید کئوری نوشته می شد، اما با کمک Orm می توانید به راحتی با دیتابیس متصل شوید و با آن کار کنید. به مثال زیر توجه نمایید.
دریافت اطلاعات کاربران در روش سنتی
SELECT * FROM USER |
مشکلات این روش
- وقتی تعداد ستون های جدول زیاد است و کوئری ها پیچیده است احتمال خطا زیاد می شود.
- توسعه و نوشتن دستورات دشوار می باشد.
- در اتصال به پایگاه داده های دیگر نیاز به تغییر تمام کوئری ها داریم.
دریافت اطلاعات کاربران با entity framework در سی شارپ
db.users.tolist |
مزیت استفاده از orm در ارتباط با دیتابیس
- کاهش و مشاهده خطا در زمان کامپایال
- آپ دیت مدل شما با تغییر دیتابیس (db.users.edit(newuser)db.savechage)
- مهیا شدن استفاده از dal یا همون data access layer با Orm
سه کامپوننت اصلی Room
Database
room از پایگاه داده و به عنوان نقطه دسترسی اصلی برای اتصال اساسی با برنامه کاربردی استفاده می کند.
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); } |
Entity
Entity در دیتابیس Room به معنی جدول می باشد که به آن Table نیز گفته می شود. شما در دیتابیس Sqlite می توانید جداول مربوط به دیتابیس خود را بسازید.
@Entity class User { @PrimaryKey public int id; public String firstName; @Ignore |
annotation های مفید و ویژگی
- Foreign keys: نام کلیدهای خارجی
- Indices: لیست نشانگرهای موجود در جدول
- Primary keys :نام کلیدهای اصلیentity
- table name: نام جدول
DAO.3
DAO مخفف کلمه Database Access Object می باشد که از یک سری متد ها ساخته شده است.
@Dao public interface UserDao { @Query(“SELECT * FROM user”) List<User> getAll(); @Query(“SELECT * FROM user WHERE uid IN (:userIds)”) @Query(“SELECT * FROM user WHERE first_name LIKE :first AND “ @Insert @Delete |
4 annotation
- Qury: برای اجرای query خام باید از این انوتیشن استفاده شود.
- Insert: برای وارد کردن داده ها به دیتابیس می توانید این انوتیشن استفاده کنید.
- Update: شما با کمک این انوتیشن می توانید عملیات به روز رسانی روی داده های موجود در دیتابیس خود را انجام دهید.
- Delete: این انوتیشن برای پاک کردن داده ها از روی دیتابیس استفاده می شود.
راه اندازی یک پروژه جدید با Room
برای راه اندازی یک پروژه جدید با Room، باید مراحل زیر را انجام دهید.
مرحله اول
ایجاد یک پروژه جدید در اندروید استودیو
مرحله دوم
اضافه کردن کد ها یا وابستگی های زیر در فایل build.gradle سطح آپ
dependencies { implementation “androidx.room:room-runtime:$room_version” |
مرحله سوم
در فایل build.gradle سطح پروژه خود، وارد بخش repositories شوید و مطمئن شوید که عبارت ()google اضافه شده است. اطلاعات فایل شما باید به صورت زیر باشد.
repositories { google() jcenter() } |
پس از اضافه شدن ()google فایل شما، پروژه خود را همگام سازی نمایید و در نهایت پروژه شما آماده کار با Room می باشد.
نحوه پیاده سازی دیتابیس Room در سورس اندروید
Entity
Entity یکی از انوتیشن های Room می باشد که در کلاس ساخت جدول در دیتابیس مورد استفاده قرار می گیرد.
SQLite database
تمام اطلاعات اپلیکشن خود را در می توانید بر هر دیوایسی در دیتابیس ذخیره سازی نمایید. شما با استفاده از sqlite می توانید به راحتی این کار را انجام دهید.
DAO
شما باید تمامی کویری هایی که در دیتابیس استفاده می شود را در این کلاس فراخوانی نمایید. این کویری ها @Delete , @Insert ,Update می باشند.
مخفف عبارت Data access object است . ی که کنید باید شوند.
Room database
SQLiteOpenHelper بالاترین سطح SQLite database می باشد که برای مدیریت مورد استفاده قرار می گیرد. شما به کمک کلاس DAO می توانید تمام کویری ها را مدیریت و پردازش نمایید.
Repository
Repository کلاسی می باشد که به وسیله شما ساخته می شود. این کلاس وظیفه ذخیره سازی منابع را بر عهده دارد.
ViewModel
این کلاس به صورت یک پل ارتباطی بین UI و Repository عمل می کند و تمامی المنت هایی که در UI برای دیتابیس مورد استفاده قرار می گیرند را به راحتی مورد استفاده قرار می گیرند.
LiveData
لایو دیتا به وسیله observed، تمام دیتا را در اخرین state ذخیره می کند و در زمان تغییرات آن ها به سرعت و اتوماتیک آپدیت می شوند. این کامپونتت به خوبی از LifeCycle پشتیبانی می کند.
مشکلات عمده در استفاده از Sqlite
- در زمان کامپایل هیچ بررسی بر روی کوئری ها انجام نمی شود.
- نوشتن کد زیاد و تکراری برای تبدیل کوئری به یک شیء جاوا
- وقت گیر بودن و ایجاد خطا در زمان تغییر دادن دستی تمام query های دیتابیس
نحوه نصب Room persistence
مرحله اول: اضافه کردن Room
برای اضافه کردن Room باید وارد فایل build.gradle پروژه خود شید و maven repo گوگل را همانند کد زیر به پروژه خود اضافه نمایید.
allprojects { repositories { jcenter() maven { url ‘https://maven.google.com’ } } } |
مرحله دوم: اضافه کردن dependency
در این مرحله باید وارد فایل build.gradle برنامه خود شوید و همانند کد زیر dependency ها را به فایل خود اضافه کنید.
implementation “android.arch.persistence.room:runtime:1.0.0-beta2” annotationProcessor “android.arch.persistence.room:compiler:1.0.0-beta2” |
مرحله سوم: تست کردن انتقال دیتابیس
برای تست کردن انتقال دیتابیس از Sqlite به Room به dependency زیر نیز نیاز دارید.
testImplementation “android.arch.persistence.room:testing:1.0.0-beta2” |
راه اندازی یک پروژه جدید با Room
مرحله اول: اضافه کردن کد زیر در فایل build.gradle سطح اپ
dependencies { implementation “androidx.room:room-runtime:$room_version” |
مرحله دوم: اضافه کردن ()google به بخش repositories در فایل build.gradle سطح پروژه
repositories { google() jcenter() } |
ایجاد data access object) DAO)
شما طبق توضیحات مربوط به DAO و کد زیر می توانید یک interface) DAO) ساده با عملگر CRUD در Contact ایجاد و اضافه نمایید.
Dao public interface ContactDAO { @Insert public void insert(Contact… contacts); @Update public void update(Contact… contacts); @Delete public void delete(Contact contact); } |
در کد بالا از 3 عملیات استفاده شده است که در زیر به معرفی آن ها می پردازیم.
عملیات اضافه کردن (Insert)
از عملیات Insert برای ایجاد یک عملیات درج یا اضافه کردن مورد استفاده قرار می گیرد. شما با این عملیات تنها می توانید متدی را تعریف کنید که Contact contacts را به عنوان یک پارامتر دریافت می کنید که به صورت Insert@ حاشیه نویسی می شود.
عملیات بروزرسانی (Update)
این عملیات نیز همانند عملیات اضافه کردن عمل می کند که تنها می توانید برای ایجاد یک عملیات بروزرسانی از آن استفاده کنید که Contact contacts را به عنوان یک پارامتر دریافت نمایید که با دستور Update@ حاشیه نویسی می شود.
عملیات پاک کردن (Delete)
از این عملیات برای ایجاد یک عملیات پاک کردن استفاده می شود که Contact contacts را به صورت یک پارامتر دریافت خواهید کد و می توانید با دستور Delete@ آن را حاشیه نویسی نمایید.
کلاس های دیتابیس Room
کلاس user
@Entity public class User { @PrimaryKey public int uid; @ColumnInfo(name = “first_name”) public String firstName; @ColumnInfo(name = “last_name”) public String lastName; } |
کلاس userdao
@Dao public interface UserDao { @Query(“SELECT * FROM user”) List<User> getAll(); @Query(“SELECT * FROM user WHERE uid IN (:userIds)”) List<User> loadAllByIds(int[] userIds); @Query(“SELECT * FROM user WHERE first_name LIKE :first AND ” + “last_name LIKE :last LIMIT 1”) User findByName(String first, String last); @Insert void insertAll(User… users); @Delete void delete(User user); } |
کلاس AppDatabase
@Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserDao userDao(); } |
استفاده از کتابخانه Paging و پایگاه داده Room در اپلیکیشن های اندروید
کتابخانه Paging چیست؟
کتابخانه Paging یکی دیگر از کتابخانه های اضافه شده به کامپوننت های معماری اندروید می باشد که در موضوعاتی همچون مدیریت مؤثر بارگذاری و نمایش مجموعه داده های بزرگ در RecyclerView مورد استفاده قرار می گیرد.
دلیل استفاده از کتابخانه Paging
- فراخوانی نکردن داده های بدون نیاز
- صرفه جویی در مصرف باتری و پهنای باند کاربر
- بازیابی همه داده های مورد نیاز در زمان کار با حجم کم
مراحل استفاده از کتابخانه Paging و پایگاه داده Room
مرحله اول: ایجاد یک پروژه اندروید در استودیو
در این مرحله باید انروید اندروید استودیو نسخه 3 را دانلود و پس از نصب آن، برنامه را باز نمایید. سپس یک پروژه جدید با اکتیویتی خالی به نام MainActivity بسازید و گزینه Include Kotlin support را همانند تصویر زیر انتخاب کنید.
مرحله دوم: افزودن کامپوننت های معماری
کد زیر را در بخش build.gradle پروژه خود اضافه کنید.
dependencies { implementation fileTree(dir: ‘libs’, include: [‘*.jar’]) implementation “android.arch.persistence.room:runtime:1.1.1” kapt “android.arch.persistence.room:compiler:1.1.1” implementation “android.arch.paging:runtime:1.0.1” implementation “com.android.support:recyclerview-v7:27.1.1” } |
مرحله سوم: ایجاد یک موجودیت (Entity)
در این مرحله باید یک کلاس داده جدید کاتلین به نام Person ایجاد نمایید که در ساده سازی امور مورد استفاده قرار می گیرد و دارای 2 فیلد یک ID یکتا (id) و نام شخص (name) است. برای این کار باید از یک متد به نام ()toString استفادع نمایید تا مقدار name را نمایش دهد.
import android.arch.persistence.room.Entity @Entity(tableName = “persons”) data class Person( @PrimaryKey val id: String, val name: String ) { override fun toString() = name } |
مرحله چهارم: ایجاد ADO
طبق کد زیر می توانید یک ADO را ایجاد کنید.
import android.arch.lifecycle.LiveData @Dao interface PersonDao { @Query(“SELECT * FROM persons”) fun getAll(): LiveData<List> @Query(“SELECT * FROM persons”) fun getAllPaged(): DataSource.Factory<Int, Person> @Insert fun insertAll(persons: List) @Delete fun delete(person: Person) } |
سخن پایانیroom یکی از ابزار های کاربردی دیتابیس SQLite می باشد که دارای نکات کاربردی همچون کامپوننت های اصلی، کلاس های Room، راه اندازی یک پروژه جدید با Room، نحوه پیاده سازی Room در سورس اندروید و … می باشد که با یادگیری آن ها کار بار Room برای شما راحت و جذاب می شود. در صورتی که با مفاهیم دیتابیس و انواع آن ها آشناییت نداریت، بهتر است قبل از کار با Room با مفاهیم دیتابیس، دیتابیس SQLite و دیگر دیتابیس ها آشنا شوید. برای دریافت پاسخ سوالات خود و بهره مند شدن از تجربه اساتید خبره و دیگر دوستانتان در کمپین آموزشی بی لرن می توانید سوالات خود را در کافه گپ و گفت مطرح نمایید و در سریعترین زمان، پاسخ سوال خود را دریافت نمایید. همچنین می توانید با عضویت در کمپین آموزشی بی لرن، از دوره های آموزشی رایگان و کاربردی در زمینه های مختلف به صورت تخصصی و حرفه ای بهره مند شوید. با توجه به مسیر یادگیری در زمینه های مختلف می توانید برای شروع طراحی سایت از آموزش MySQL بهره مند شوید. |
دیدگاهتان را بنویسید