基于**整洁架构(Clean Architecture)**的后台管理系统代码生成器。
根据用户定义的 PO 类,一键生成符合企业级包规范的后端代码与前端代码(前后端分离),生成过程无需任何 AI 参与,纯模板 + 元数据驱动。
生成的后台管理系统以
sparrow-example为后端脚手架,以react-next-admin(位于sparrow-js前端工程内)为前端脚手架。
日常后台管理系统的开发存在大量重复劳动:Controller / Service / DAO / Mapper / 前端列表页、表单页等结构高度相似,仅字段与业务含义不同。
sparrow-coder 解决了这个问题:
- 在界面上定义项目(项目名、包名、模块前缀、代码架构、脚手架等);
- 下载脚手架到本地,得到一个可独立编译启动的前后端分离业务工程;
- 在生成的项目中手动编写 PO 类(表结构元数据来源);
- 点击界面上的生成代码按钮,自动生成基于整洁架构的后端代码与前端页面;
- 重新编译启动业务项目,代码即生效;
- 根据 column 配置自定义前端界面展示。
- 一键生成:根据 PO 类自动生成 DAO / Domain / Adapter / Infrastructure 各层代码与前端页面,无需 AI;
- 整洁架构:后端严格遵循
adapter → domain → infrastructure → dao的分层与依赖倒置; - 前后端分离:后端 Spring Boot + 前端 React/Next.js,一次生成同时输出两端;
- 父子关系建模:通过
@ListDatasource(TABLE)关联父子表,自动生成下拉/关联控件; - 界面可定制:通过
column_configs配置列的展示、过滤、行菜单等。
| 类 | 说明 |
|---|---|
com.sparrow.coder.po.Department |
父表(部门) |
com.sparrow.coder.po.UserExample |
子表(用户),通过 @ListDatasource(type = TABLE, params = "t_department") 关联部门 |
注意:以上两个类(
Department、UserExample)是官方提供的示例,仅作参考。生成业务代码时不要直接使用它们——请将其复制到你自己的 PO 包中,并把包名改为你的业务包名(例如com.yourcompany.po.Department、com.yourcompany.po.UserExample)。
@Table(name = "t_user_example")
@Data
public class UserExample extends PO {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", columnDefinition = "int COMMENT 'ID'")
private Long id;
@Column(name = "user_name", nullable = false, columnDefinition = "varchar(32) COMMENT '用户名'")
private String userName;
// 父表关联:自动生成下拉选择控件
@Column(name = "department_id", columnDefinition = "int comment '部门ID'")
@ListDatasource(type = ListDatasourceType.TABLE, params = "t_department")
private Long departmentId;
}sparrow-coder 依赖以下仓库,需一并 clone 并按顺序编译安装:
| 仓库 | 作用 |
|---|---|
| sparrow-shell | 基础框架(infra-bom、sparrow-bom 及 sparrow 核心模块) |
| sparrow-starter | Spring Boot 与 Sparrow 框架的整合 Starter |
| sparrow-file | 文件服务(file-starter) |
| sparrow-passport-ddd | 认证框架(passport-starter) |
| sparrow-example | 后端脚手架(后台代码模板) |
| sparrow-js | 前端工程,react-next-admin 为前端脚手架 |
| 依赖 | 版本要求 |
|---|---|
| JDK | 17+ |
| Maven | 3.6+ |
| MySQL | 5.7 / 8.x |
| Redis | 5+ |
| Node.js | 18+(仅前端项目运行需要) |
mkdir -p ~/workspace/sparrow && cd ~/workspace/sparrow
# 基础依赖
git clone https://github.com/sparrowzoo/sparrow-shell.git
git clone https://github.com/sparrowzoo/sparrow-starter.git
git clone https://github.com/sparrowzoo/sparrow-file.git
git clone https://github.com/sparrowzoo/sparrow-passport-ddd.git
# 前端工程(含 react-next-admin 前端脚手架)
git clone https://github.com/sparrowzoo/sparrow-js.git
# 本项目
git clone https://github.com/sparrowzoo/sparrow-coder.git
# 后端脚手架 sparrow-example(位于工作区根目录,与 sparrow 平级)
cd ~/workspace
git clone https://github.com/sparrowzoo/sparrow-example.gitcd ~/workspace/sparrow
cd sparrow-shell && mvn clean install -Dmaven.test.skip=true
cd ../sparrow-starter && mvn clean install -Dmaven.test.skip=true
cd ../sparrow-file && mvn clean install -Dmaven.test.skip=true
cd ../sparrow-passport-ddd && mvn clean install -Dmaven.test.skip=true
# 编译本项目
cd ../sparrow-coder && mvn clean install -Dmaven.test.skip=true
sparrow-shell内含sparrow-bom(及infra-bom),需最先安装,其余模块依赖其生成的 POM。
在 MySQL 中创建数据库 sparrow,并执行 ddl 目录下的建表脚本:
mysql -uroot -p sparrow < ddl/t_project_config.sql
mysql -uroot -p sparrow < ddl/t_table_config.sql
mysql -uroot -p sparrow < ddl/t_user_example.sql编辑 coder-main-spring-boot/src/main/resources/application.properties:
# 本地工作区路径(Mac 示例)
workspace=/Users/<your-name>/workspace
project_root=sparrow
# 前端工程相对路径
frontend_project_root=sparrow/sparrow-js
# 数据库
spring.datasource.druid.url=jdbc:mysql://127.0.0.1/sparrow?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
spring.datasource.druid.username=root
spring.datasource.druid.password=<your-password>
# Redis
spring.redis.host=127.0.0.1
spring.redis.port=6379编辑 coder-main-spring-boot/src/main/configs/dev.properties:
# 前端静态资源物理路径
physical_resource={your_home_path}/workspace/sparrow/sparrow-js/sourcecd coder-main-spring-boot
mvn spring-boot:run默认端口为 8888(dev 环境),启动后访问:
- 界面首页:http://localhost:8888
- 接口文档(Knife4j / Swagger):http://localhost:8888/doc.html
- Druid 监控:http://localhost:8888/druid(账号密码均为
druid)
按上文启动后,登录进入系统。
在「项目配置」界面新增项目,填写:
- 项目名称 / 中文名称 / 前端项目名称
- 模块前缀、代码架构、脚手架
- 是否支持国际化、是否使用父 module 等
定义完成后,将脚手架下载到本地(zip-download)。下载得到的工程即为你将要生成的业务项目,包含符合你自己包规范的后端代码与前端代码。
cd <生成的项目根目录>
# 后端
mvn clean package -Dmaven.test.skip=true
java -jar <module>/target/*.jar
# 前端(前后端分离,单独启动)
cd <前端目录>
npm install
npm run dev生成的项目是前后端分离结构,后端与前端需分别编译启动。
在刚生成的项目中,参考官方示例手动创建 PO 类:
com.sparrow.coder.po.Department—— 父表com.sparrow.coder.po.UserExample—— 子表(父子关系示例)
重要:示例类不能直接用于生成。请将它们复制到你自己的 PO 包中,并将包名修改为你的业务包名(例如
com.yourcompany.po.Department、com.yourcompany.po.UserExample),再进行代码生成。
PO 类通过 JPA 注解(@Table / @Column / @ListDatasource)描述表结构与字段展示元数据。
回到 sparrow-coder 界面,选择表后点击「生成代码」按钮(/coder/generate.json)。
回到业务项目,重新编译并启动,生成的代码即生效。
根据 t_table_config 中的 column_configs(列配置),自定义前端界面的列展示、过滤、行菜单、状态命令等。
sparrow-coder
├── bom # 依赖版本管理(coder-bom,parent 为 infra-bom)
├── coder-protocol # 协议层(Query / Param / 枚举)
├── coder-po # 持久化对象(PO 类,含官方示例)
├── coder-dao-api # DAO 接口定义
├── coder-dao-sparrow # DAO 的 Sparrow ORM 实现
├── coder-dao-mybatis # DAO 的 MyBatis 实现
├── coder-domain # 领域层(业务逻辑 / 代码生成核心)
├── coder-infrastructure # 基础设施层
├── coder-adapter # 适配层(Controller / Assemble)
├── coder-spring-starter # Spring Boot 整合 Starter
├── coder-main-spring-boot # 启动模块(Application 入口)
└── ddl # 建表脚本
- 编译失败:找不到
infra-bom/sparrow-*依赖 —— 依赖仓库未安装,请按 4.2 顺序重新mvn clean install。 - 启动时数据库连接失败 —— 检查 MySQL 是否启动、
sparrow库是否创建、账号密码是否正确。 - 前端静态资源 404 —— 检查
application.properties中workspace/frontend_project_root与dev.properties中physical_resource路径是否正确。