我用 AI 做了一个 Room 数据库代码生成工具

0 阅读5分钟

我用 AI 做了一个 Room 数据库代码生成工具

告别重复劳动,让 Room 开发效率提升 10 倍


为什么要做这个?

作为一个Android 开发,我对 Room 数据库又爱又恨。

爱它:官方 ORM,类型安全,配合 Kotlin 协程用起来丝滑。

恨它:每次设计数据库都要写一堆重复代码。

  • @Entity 类要写字段、注解、关系
  • @Dao 接口要写 CRUD 方法
  • @Database 类要注册 Entity
  • Repository 要封装数据源

一个中等复杂度的项目,光 Room 相关代码就要写几百行。而且一旦表结构变化,所有相关文件都要手动修改,容易出错。

痛点总结:

  1. 重复劳动多:Entity、DAO、Database、Repository 四个文件,结构高度相似
  2. 容易遗漏:新增字段后忘记更新 DAO 或 Repository
  3. 关系映射复杂:1:1、1:N、N:M 关系容易写错
  4. 缺乏可视化:只能看代码,无法直观看到表关系

我的诉求很简单: 能不能有个工具,让我可视化设计表结构,然后自动生成所有 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 图标。

image.png

欢迎界面简洁明了,点击 Create New Table 开始设计你的数据库表。

Step 2:创建数据表

输入表名,添加字段。每个字段可设置:

  • 字段名:如 idnameageemail
  • 字段类型:支持 Long、Int、String、Double、Float、Boolean、ByteArray 等 9 种 Room 类型
  • 主键:勾选后自动添加 @PrimaryKey 注解
  • 可空:勾选后生成可空类型 ?

step2.jpg 例如创建一个 User 表,包含 id:Long(PK)name:Stringage:Int(nullable)email:String 四个字段,点击 Add Table 确认。

Step 3:配置表关系

在 Relations 标签页中,配置表之间的关联关系:

  • Source Table:选择源表(如 User
  • Target Table:选择目标表(如 Order
  • Relation Type:选择关系类型(1:1 / 1:N / N:M)

image.png

系统会自动推导外键关联,例如 User.id → Order.userId

Step 4:预览代码

添加完表和关系后,切换到 Preview Code 标签页,实时预览生成的 Kotlin 代码:

image.png

代码预览展示完整的 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 封装层

step5.jpg 所有文件开箱即用,复制到你的 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 手动安装

  1. 从 Gitee 仓库下载最新 Release 的 .vsix 文件
  2. VS Code 中按 Ctrl+Shift+P → 输入 Install from VSIX
  3. 选择下载的 .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 生成,请遵循相关法律法规及《人工智能生成合成内容标识办法》使用与传播。