我用 AI 做了一个 Room 数据库代码生成工具
告别重复劳动,让 Room 开发效率提升 10 倍
为什么要做这个?
作为一个Android 开发,我对 Room 数据库又爱又恨。
爱它:官方 ORM,类型安全,配合 Kotlin 协程用起来丝滑。
恨它:每次设计数据库都要写一堆重复代码。
@Entity类要写字段、注解、关系@Dao接口要写 CRUD 方法@Database类要注册 EntityRepository要封装数据源
一个中等复杂度的项目,光 Room 相关代码就要写几百行。而且一旦表结构变化,所有相关文件都要手动修改,容易出错。
痛点总结:
- 重复劳动多:Entity、DAO、Database、Repository 四个文件,结构高度相似
- 容易遗漏:新增字段后忘记更新 DAO 或 Repository
- 关系映射复杂:1:1、1:N、N:M 关系容易写错
- 缺乏可视化:只能看代码,无法直观看到表关系
我的诉求很简单: 能不能有个工具,让我可视化设计表结构,然后自动生成所有 Room 代码?
RoomForge:你的 Room 数据库可视化设计器
RoomForge 是一个 VS Code 扩展,提供可视化的 Room 数据库设计界面,一键生成完整的 Kotlin 代码。
核心功能
1. 可视化表设计器
- 创建、删除、重命名表
- 拖拽字段类型(String、Int、Long、Boolean、Double、Float、Date、ByteArray)
- 设置主键、自增、可空、默认值
2. 关系映射
- 1:1 关系(一对一)
- 1:N 关系(一对多)
- N:M 关系(多对多,自动生成中间表)
3. 索引管理
- 创建普通索引、唯一索引、复合索引
- 可视化选择索引字段
4. 代码预览与生成
- 实时预览生成的 Kotlin 代码
- 一键生成完整代码:Entity、DAO、Database、Repository
- 支持自定义包名和数据库名称
图文教程:5 步上手
Step 1:打开 Schema 设计器
在 VS Code 中按 Ctrl+Shift+P,输入 RoomForge: Open Designer,或点击左侧活动栏的 RoomForge 图标。
欢迎界面简洁明了,点击 Create New Table 开始设计你的数据库表。
Step 2:创建数据表
输入表名,添加字段。每个字段可设置:
- 字段名:如
id、name、age、email - 字段类型:支持 Long、Int、String、Double、Float、Boolean、ByteArray 等 9 种 Room 类型
- 主键:勾选后自动添加
@PrimaryKey注解 - 可空:勾选后生成可空类型
?
例如创建一个
User 表,包含 id:Long(PK)、name:String、age:Int(nullable)、email:String 四个字段,点击 Add Table 确认。
Step 3:配置表关系
在 Relations 标签页中,配置表之间的关联关系:
- Source Table:选择源表(如
User) - Target Table:选择目标表(如
Order) - Relation Type:选择关系类型(1:1 / 1:N / N:M)
系统会自动推导外键关联,例如 User.id → Order.userId。
Step 4:预览代码
添加完表和关系后,切换到 Preview Code 标签页,实时预览生成的 Kotlin 代码:
代码预览展示完整的 Room 注解结构,包括 @Entity、@PrimaryKey、@ForeignKey 等,确认无误后点击 Generate Code。
Step 5:生成代码
点击 Generate Code 后,RoomForge 会在项目中自动生成以下文件:
generated/roomforge/
├── entity/
│ ├── User.kt # @Entity 数据类
│ └── Order.kt
├── dao/
│ ├── UserDao.kt # @Dao 接口
│ └── OrderDao.kt
├── database/
│ └── AppDatabase.kt # @Database 抽象类
└── repository/
└── UserRepository.kt # Repository 封装层
所有文件开箱即用,复制到你的 Android 项目中即可编译运行。
功能演示:三种关系场景
场景 1:创建一个用户表
生成的代码:
@Entity(tableName = "User")
data class User(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val name: String,
val age: Int?,
@ColumnInfo(index = true)
val email: String
)
场景 2:建立 1:N 关系(用户 → 订单)
生成的代码:
@Entity(
tableName = "Order",
foreignKeys = [
ForeignKey(
entity = User::class,
parentColumns = ["id"],
childColumns = ["userId"],
onDelete = ForeignKey.CASCADE
)
]
)
data class Order(
@PrimaryKey(autoGenerate = true)
val orderId: Long = 0,
val userId: Long,
val amount: Double
)
data class UserWithOrders(
@Embedded val user: User,
@Relation(
parentColumn = "id",
entityColumn = "userId"
)
val orders: List<Order>
)
场景 3:N:M 关系(学生 ↔ 课程)
系统自动生成中间表 StudentCourseCrossRef:
@Entity(
tableName = "StudentCourseCrossRef",
primaryKeys = ["studentId", "courseId"],
foreignKeys = [
ForeignKey(entity = Student::class, parentColumns = ["studentId"], childColumns = ["studentId"]),
ForeignKey(entity = Course::class, parentColumns = ["courseId"], childColumns = ["courseId"])
]
)
data class StudentCourseCrossRef(
val studentId: Long,
val courseId: Long
)
data class StudentWithCourses(
@Embedded val student: Student,
@Relation(
parentColumn = "studentId",
entityColumn = "courseId",
associateBy = Junction(
value = StudentCourseCrossRef::class,
parentColumn = "studentId",
entityColumn = "courseId"
)
)
val courses: List<Course>
)
如何安装使用?
方式 1:源码构建(推荐)
git clone https://gitee.com/hrecall/roomforge.git
cd roomforge
npm install
npm run build
在 VS Code 中打开项目,按 F5 启动扩展开发模式即可使用。
方式 2:VSIX 手动安装
- 从 Gitee 仓库下载最新 Release 的
.vsix文件 - VS Code 中按
Ctrl+Shift+P→ 输入Install from VSIX - 选择下载的
.vsix文件,安装完成
技术栈
Extension Host(VS Code 扩展主体):
- TypeScript + esbuild
- Handlebars 模板引擎(代码生成)
Webview UI(可视化界面):
- React 18 + TypeScript
- Tailwind CSS v4
- Vite 构建
代码生成逻辑:
- Entity:字段类型映射、注解生成
- DAO:CRUD 方法、关系查询
- Database:Entity 注册、版本管理
- Repository:数据源封装
开源与免费试用
RoomForge 当前完全免费,支持所有功能。
- ✅ 可视化表设计
- ✅ 关系映射(1:1、1:N、N:M)
- ✅ 索引管理
- ✅ Kotlin 代码生成
- ✅ 自定义包名和数据库名称
后续计划:
- 支持导出为
.kt文件批量生成 - 支持从现有代码反向导入表结构
- 支持 Flutter/Dart 代码生成
- 支持数据库迁移脚本生成
开源地址: Gitee - RoomForge
欢迎 Star 和 Feedback!问题反馈请提 Issue 或评论区留言。
写在最后
有了 AI,我们可以更快地验证想法、更快地迭代产品。
RoomForge 只是我的第一个尝试。如果你也有类似的痛点,或者有更好的想法,欢迎一起交流。
如果觉得有用,请点赞、收藏、转发,这是我持续分享的动力!
作者: Recall
技术栈: Kotlin / Jetpack Compose / Android 开发
持续更新中,欢迎关注!
本内容由 Coze AI 生成,请遵循相关法律法规及《人工智能生成合成内容标识办法》使用与传播。