| 📋 Entity | ⚡ DAO | 🗄️ Database |
|---|---|---|
| 表结构 数据模型 | 操作接口 CRUD | 数据库中枢 连接 & 管理 |
|
|
|
数据实体,对应 SQLite 表。每个 Entity 类定义一个表结构,字段映射为列。
关键注解: @Entity, @PrimaryKey, @ColumnInfo, @ForeignKey
数据访问对象,定义操作数据库的方法。支持 suspend 函数、Flow、RxJava。
关键注解: @Dao, @Insert, @Query, @Update, @Delete
数据库持有者,提供 DAO 实例。负责创建、升级、版本管理。
关键点: @Database, entities[], version, 单例, 迁移
// ========== 1. Entity (用户表) ========== @Entity(tableName = "users") data class User( @PrimaryKey(autoGenerate = true) val uid: Int = 0, @ColumnInfo(name = "full_name") val name: String, val age: Int ) // ========== 2. DAO (数据访问) ========== @Dao interface UserDao { @Query("SELECT * FROM users") fun getAll(): List<User> @Insert suspend fun insert(user: User) @Delete suspend fun delete(user: User) } // ========== 3. Database (数据库) ========== @Database(entities = [User::class], version = 1, exportSchema = false) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao companion object { @Volatile private var INSTANCE: AppDatabase? = null fun getInstance(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "my_room.db" ).build().also { INSTANCE = it } } } } }
AppDatabase.getInstance() 获取 Database 单例。database.userDao() 获得 DAO 实现(Room 自动生成)。getAll())编译时映射为 SQL,执行查询。