【Jetpack】ORM データベース アクセス フレームワーク Room の紹介 (ORM のオブジェクト リレーショナル マッピングの概念の紹介 | Room フレームワークのコンポーネント - エンティティ、データベース アクセス オブジェクト、データベース ホルダー | Room フレームワークの使用手順)





1. オブジェクト リレーショナル マッピング - ORM / オブジェクト リレーショナル マッピング



Android システムで使用されるデータベースはSQLite リレーショナル データベースですが、Android が提供する API を使用して SQLite データベースにアクセスするのは非常に面倒なため、多くのORM フレームワークが登場しています。

ORM 英語の正式名称オブジェクト リレーショナル マッピング、オブジェクト リレーショナル マッピング。

オブジェクト リレーショナル マッピング ORM はプログラミング テクノロジであり、オブジェクト指向プログラミング言語リレーショナルデータベース間のマッピング。

  • オブジェクトはオブジェクト指向プログラミング言語を指し、
  • リレーショナルはリレーショナル データベースを指します。

ORM オブジェクト リレーショナル マッピング フレームワークを使用してデータベースにアクセスするとデータベース操作プロセスを簡素化できます. 開発者は、オブジェクト指向 API を使用してデータベースと対話します。

ORM フレームワークは、多くの場合、メタデータデータベーステーブルをプログラミング言語のクラスにマップし、データベース テーブル フィールドはクラス内のフィールドに対応します。一般的に使用されるメタデータは次のとおりです。

  • 注釈
  • 構成ファイル

ORM フレームワークの利点:

  • 開発効率の向上: ORM を使用してデータベースを操作すると、データベース操作プロセスが簡素化され、コードの開発と保守が容易になります。
  • 移植性の向上: ORM フレームワークを使用してデータベースを操作するとコードを変更せずに基盤となるデータベースを置き換えることができます。
  • パフォーマンスの向上: ORM フレームワークの操作の追加、削除、チェック、および変更のパフォーマンスは、一般的に。
  • セキュリティの向上: SQL ステートメントを直接使用してクエリを実行すると、SQL インジェクション攻撃を回避できます。

一般的な ORM フレームワーク:

  • Android プラットフォーム: GreenDao / ORMLite ;
  • JavaEE プラットフォーム: 休止状態;
  • .NET プラットフォーム: エンティティ フレームワーク;
  • Python プラットフォーム: DiagoORM;

Android では、Google が公式に SQLite リレーショナル データベース操作のカプセル化に基づく ORM フレームワーク、Room フレームワークを提供しています。





2. Room フレームワークのコンポーネント




1. @Entity / @Dao / @Database アノテーション


Room フレームワークの重要な注釈:

  • @Entity アノテーション:データベース内のテーブル構造に対応するJavaBean エンティティ クラスを変更するために使用されます。
  • @Dao アノテーション:データベースアクセス オブジェクト クラスを変更するために使用されます。これは、データベースの追加、削除、変更、およびチェックの機能を定義します。
  • @Database アノテーション:データベースホルダーを変更します。データベース ホルダーはデータベース リンク オブジェクトであり、アプリケーション永続データの基礎となる接続のアクセス ポイントです。
    • @Database アノテーションで装飾されたクラスは、RoomDatabase 抽象クラスを継承する必要があります。
    • この注釈では、データベース関連のエンティティ クラスのリストを定義する必要があります。
    • DatabaseHolder には、Dao オブジェクトを返すパラメーターのない抽象メソッドが含まれています。

2. Entityエンティティクラス/Daoデータベースアクセスオブジェクト/データベースデータベースホルダーの関係


データベース データベース ホルダー、Dao (データ アクセス オブジェクト) データベース アクセス オブジェクト、エンティティ エンティティ クラス、3 つの関係は次のとおりです。

  • まず、 Android アプリケーションで、Room フレームワークのデータベースを介してデータベース ホルダー オブジェクトを取得します。
  • 次に、 データベース ホルダー データベースを介して Dao (Data Access Objects) データベース アクセス オブジェクトを取得します。
  • 最後に、 Dao (データ アクセス オブジェクト) データベース アクセス オブジェクトを介して、データベース内の各テーブルに対応するエンティティ エンティティ クラス オブジェクトにアクセスします。

ここに画像の説明を挿入





3. Room フレームワークを使用する手順



Room フレームワークの使用手順:

  • Room フレームワークの依存関係を追加する
  • エンティティ エンティティ クラスの作成
  • Dao エンティティ クラスの作成
  • RoomDatabase データベース インスタンス オブジェクトを作成する
  • Room データベースを初期化する
  • Dao を呼び出して、データベースの追加、削除、変更、およびクエリ操作を実行する

1. Room フレームワークの依存関係を追加する


Module module の下のbuild.gradle ビルド スクリプトで、次の依存関係を構成します。

dependencies {
    
    
	// 配置 Room 框架版本号
    def room_version = "2.4.0"
	
	// 核心运行时依赖库 在应用运行时提供 Room 框架的数据库相关核心功能
    implementation "androidx.room:room-runtime:$room_version"
    // 编译时依赖项 在编译时实时生成 Room 代码 如 : Dao 实现类 / AppDatabase 子类 / Entity 实体类映射器
    annotationProcessor "androidx.room:room-compiler:$room_version"

    // 可选配置项 - 支持 Kotlin 扩展和协程的 Room 框架 如果使用的是 Kotlin 语言必须导入该依赖
    implementation "androidx.room:room-ktx:$room_version"
}

androidx.room:room-runtime 依存ライブラリランタイム、アプリケーションの実行時に Room フレームワークのデータベース関連のコア機能を提供します。依存ライブラリには次のようなRoom 永続ライブラリのコア機能が含まれています。 :

  • RoomDatabase クラス: 1 つ以上のテーブルを含むことができるデータベースを表すために使用され、データの挿入、削除、クエリなど、データベースを操作するいくつかのメソッドを提供します。
  • エンティティ アノテーション: エンティティ クラスをマークしたり、エンティティ クラスに対応するデータベース テーブルの名前とフィールド情報を指定したりするために使用されます。
  • Dao データベース アクセス オブジェクト: クエリ、挿入、削除操作など、データベースにアクセスするためのメソッドを定義するために使用されます。
  • クエリ アノテーション: DAO インターフェイスでメソッドをマークし、SQL クエリ ステートメントを指定するために使用されます。
  • PrimaryKey アノテーション: エンティティ クラスで主キー フィールドを指定するために使用されます。
  • TypeConverters 注釈: 型コンバーター クラスをマークして、特定の型のデータをデータベース内のネイティブ型に変換するために使用されます。

androidx.room:room-compiler 依存関係ライブラリは、Room 永続ライブラリのコンパイル、コンパイル時に。

  • データベースを作成してアクセスするためのAppDatabase のサブクラス
  • SQL クエリおよび操作を実行するためのDao データベース アクセス オブジェクト実装クラス。
  • エンティティ クラス Entity のマッパーは、データベース内のデータをエンティティ クラスにマップするために使用されます。

androidx.room: room-ktx は、Kotlin 拡張機能を提供するライブラリに依存します. Kotlin 言語を使用する場合は、依存ライブラリをインポートする必要があります。


2. Entity エンティティ クラスを作成する


データベース内のテーブルに対応するEntity エンティティ クラスを作成し、次の注釈を使用して変更する必要があります

  • @Entity アノテーションを使用してエンティティ クラスを変更し、データベース テーブル名を指定します。
  • @PrimaryKey アノテーションを使用して、主キーの値を変更します。
  • @ColumnInfo アノテーションを使用して、データベース テーブルの列名に対応するフィールドを変更します。
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    @ColumnInfo(name = "name") val name: String,
    @ColumnInfo(name = "age") val age: Int
)

3. Dao エンティティ クラスを作成する


Dao エンティティ クラスの作成: データベースにアクセスするための DAO インターフェイスを作成し、注釈を使用して SQL クエリ ステートメントなどの情報を指定します。

  • @Dao アノテーションを使用して Dao エンティティ クラス全体を変更します。
  • @Query アノテーションを使用してクエリ関数を変更します。
  • @Insert アノテーションを使用して挿入関数を変更します。
  • @Delete アノテーションを使用して削除機能を変更します。
@Dao
interface UserDao {
    
    
    @Query("SELECT * FROM users")
    fun getAll(): List<User>

    @Insert
    fun insert(user: User)

    @Delete
    fun delete(user: User)
}

4. RoomDatabase データベース インスタンス オブジェクトを作成する


RoomDatabase データベース インスタンス オブジェクトを作成します。RoomDatabase のサブクラス インスタンス オブジェクトを作成し、抽象メソッドを定義して DAO インスタンスを取得します。

@Database(entities = arrayOf(User::class), version = 1)
abstract class AppDatabase : RoomDatabase() {
    
    
    abstract fun userDao(): UserDao
}

5. Room データベースの初期化


データベースの初期化: アプリケーションで Room データベースを使用する前に、まずデータベース インスタンスを作成する必要があります。

val db = Room.databaseBuilder(
    applicationContext,
    AppDatabase::class.java, "database-name"
).build()

6. Dao を呼び出して、データベースの追加、削除、変更、およびクエリ操作を実行します。


Dao を呼び出して、データベースの追加、削除、変更、およびクエリ操作を実行します。

db.userDao().insert(User(1, "John", 25))
val users = db.userDao().getAll()

おすすめ

転載: blog.csdn.net/han1202012/article/details/130420095
おすすめ