第155篇 Room 数据库:编译期校验的 ORM

发布时间:2026/10/15 3:59:17
第155篇 Room 数据库:编译期校验的 ORM
先把结论放在前面:Room 的三层价值是——用注解在编译期校验 SQL 与表结构、把 DAO 返回值声明成Flow/LiveData从而自动观察式查询、以及把数据库迁移从"上线后手工处理"变成"编译期可验证的代码"。其中最被低估的是第三点:Migration+exportSchema+ schema 比对工具,让数据库升级从"上线后才发现问题"变成"改代码时就报错"。这题之所以"层里有货",是因为 Room 的每个设计背后都对应一个真实痛点:类型安全、线程切换、生命周期感知、版本迁移。能把"注解处理器在编译期做了什么"讲清,而不是只说"用了注解",就是这题的分水岭。编译期:Room 到底做了什么Room 的工作发生在注解处理阶段(KSP/KAPT),源码是 Java 注解,产物是生成的 Java/Kotlin 代码。核心动作有四步:@Database 标记类 → 校验实体声明 → 生成 Database_Impl(继承 RoomDatabase) → 收集 @Dao 方法 → 逐个校验 SQL → 生成 Dao_Impl → 校验返回类型与实体字段匹配 → 校验 @Query 的 SQL 与实体字段名匹配(列名错在这里编译期就报) → 生成 LiveData/Flow 返回的实现 → 生成自动 Migration 所需的 schema json(若 exportSchema = true)