EasyFK Generator 是 易架构(EasyFK) 框架的核心代码生成工具,面向 Java / Spring Boot 技术栈的开发团队,提供 配置驱动、数据库感知、全层覆盖 的一站式代码生成能力。
核心能力:
两种使用方式:
| 项目 | 要求 |
|---|---|
| JDK | 21 或更高版本 |
| IDE(插件方式) | IntelliJ IDEA 2023.1 或更高版本 |
| 数据库(可选) | 使用数据库导入表结构时需要可连接的数据库实例 |
EasyFK Generator 提供了 IntelliJ IDEA 插件 EasyFK Generator,支持可视化操作界面,无需编写配置文件即可完成代码生成,是最便捷的使用方式。
方式一:从插件市场安装(推荐)
File → Settings → Plugins(macOS:IntelliJ IDEA → Preferences → Plugins).zip 文件后,按照下方“从本地磁盘安装”的方式进行安装。方式二:从本地磁盘安装
easyfk-generator-idea-x.x.x.zipFile → Settings → Plugins.zip 文件,安装完成后重启 IDE.easyfk-generator.json 到项目根目录,下次打开自动加载Ctrl + Alt + Z 快速打开代码生成对话框| 入口 | 说明 |
|---|---|
| File → New → EasyFK Project | 新建项目,创建项目骨架并生成代码 |
| Generate → EasyFK 增量生成 | 在已有项目中生成代码,已有文件不覆盖(Ctrl + Alt + Z) |
| Generate → EasyFK 生成业务代码 | 仅生成 Repository / Service / API / Remote / Controller |
| Generate → EasyFK 刷新模型 (字段变更) | 重新生成 Entity / Mapper + DTO / Param |
| Generate → EasyFK 刷新 DTO/Param | 仅重新生成 DTO 和 Param 类 |
| Generate → EasyFK 生成自动装配 | 生成 Spring Boot AutoConfiguration |
| 右侧工具窗口 → EasyFK | 按场景分组的快捷操作面板 |
File → Settings → Tools → EasyFK Generator:
| 设置项 | 说明 | 默认值 |
|---|---|---|
| 默认作者 | 代码注释中的 @author | eb-jack |
| 默认框架版本 | EasyFK 框架版本号 | 3.2.12 |
| 生成后自动刷新项目树 | 生成完成后自动刷新 IDEA 项目目录 | 开启 |
| 生成后弹出结果统计 | 生成完成后弹出结果信息对话框 | 开启 |
easyfk-generator-idea/USER_MANUAL.md。CLI 工具独立运行,不依赖 IDE 和 Spring Boot 项目环境,适合从零创建新项目、在任意目录快速生成代码,或配合 CI/CD 自动化流程使用。
efg-3.2.12.zip 并解压efg-3.2.12 目录执行安装Windows:
双击 install.batmacOS / Linux:
chmod +x install && ./install重新打开终端,验证安装:
efg -V输出以下内容表示安装成功:
easyfk-generator 3.2.12Windows: 双击 uninstall.bat
macOS / Linux:
chmod +x uninstall && ./uninstall# 1. 创建工作目录
mkdir my-project && cd my-project
# 2. 生成配置模板
efg init
# 3. 用编辑器打开 generator.yml,填入项目信息、app-type 和数据库配置
# 4. 执行全量生成
efgefg [选项]
efg init [-o 文件名]| 命令 | 说明 |
|---|---|
| efg | 全量生成(项目骨架 + Entity + Mapper + 业务代码 + 自动装配配置) |
| efg -p | 仅生成项目骨架(目录结构 + 构建文件) |
| efg -m | 仅生成 Entity + Mapper(包含 Mapper XML) |
| efg -s | 仅生成业务代码(Repository / Service / API / Remote / Controller + DTO/Param 等) |
| efg -a | 仅生成自动装配配置(AutoConfiguration) |
| efg -d | 仅刷新 DTO 和 Param(数据库表结构变更后使用,不影响其他代码) |
Flag 可以组合使用:
| 命令 | 说明 |
|---|---|
| efg -pm | 项目骨架 + Entity + Mapper(新项目初始化第一步) |
| efg -sa | 业务代码 + 自动装配配置(新增业务表后的第二步) |
| efg -pms | 项目骨架 + Entity + 全部业务代码 |
| 选项 | 说明 |
|---|---|
| -c <文件> | 指定配置文件路径(默认读取当前目录下的 generator.yml) |
| -h, --help | 查看帮助信息 |
| -V, --version | 查看版本号 |
| 命令 | 说明 |
|---|---|
| efg init | 在当前目录生成 generator.yml 配置模板 |
| efg init -o my-config.yml | 指定输出文件名 |
mkdir my-project && cd my-project
efg init # 生成配置模板
# 编辑 generator.yml,填入所有配置
efg # 全量生成generator.yml,在 from-db-tables 中添加新表名(或在 model-list 中新增 Model 定义)efg -m # 生成新表的 Entity + Mapper
efg -s # 生成对应的业务代码
efg -a # 刷新自动装配配置(SMART 架构需要)或一步到位:
efg # 全量生成(已有文件不会被覆盖)efg -m # 重新生成 Entity(会覆盖)
efg -d # 刷新 DTO 和 Param(会覆盖)efg -c dev-generator.yml # 开发环境配置
efg -c prod-generator.yml -m # 生产环境,仅生成 Modelefg -p # 生成目录结构和构建文件,可以先搭建好项目结构再逐步添加业务以下是 CLI 方式下 generator.yml 配置文件的完整示例,覆盖不同架构和典型场景。
easyfk:
config:
generator:
project:
project-dir: D:\workspace\projects
group-id: com.example
project-name: my-app
base-package: com.example.myapp
project-type: single
app-type: BMS
code:
module-name: myapp
model-list:
- model-name: Product
model-desc: 商品信息
- model-name: Order
model-desc: 订单信息easyfk:
config:
generator:
project:
project-dir: D:\workspace\projects
group-id: com.example
project-name: order-service
base-package: com.example.order
project-type: microservice
rpc-type: cloud
prd-type: single
build-type: gradle
app-type: CLIENT
framework-version: 3.2.12
code:
module-name: order
author: 开发者
db-type: MYSQL
db-short-url: localhost:3306/order_db
db-user: root
db-pwd: 123456
from-db-tables: t_order,t_order_item
table-prefix: t_easyfk:
config:
generator:
project:
project-dir: D:\workspace\projects
group-id: com.example
project-name: user-service
base-package: com.example.user
project-type: microservice
rpc-type: dubbo
prd-type: separation
build-type: maven
app-type: BMS
framework-version: 3.2.12
code:
module-name: user
db-type: POSTGRE_SQL
db-short-url: localhost:5432/user_db
db-user: postgres
db-pwd: 123456
from-db-tables: user_info,user_address
model-list:
- model-name: UserInfo
model-desc: 用户信息
forbidden-filed: status
- model-name: UserAddress
model-desc: 收货地址easyfk:
config:
generator:
project:
project-dir: D:\workspace\projects
group-id: com.mcst
project-name: trading
base-package: com.mcst.trading
project-type: smart
prd-type: separation
build-type: gradle
gradle-type: groovy
orm-type: MYBATIS
log-type: LOGBACK
app-type: BMS
framework-version: 3.2.12
project-version: 1.0.0-SNAPSHOT
controller-auto-config: true
code:
module-name: trading
author: 开发团队
orm-type: MYBATIS
spring-annotation: true
create-controller: true
db-type: MYSQL
db-short-url: 192.168.1.100:3306/trading_db
db-user: root
db-pwd: secure_password
table-prefix: t_
from-db-tables: t_product,t_order,t_order_item,t_payment
model-list:
- model-name: Product
model-desc: 商品
- model-name: Order
model-desc: 订单
- model-name: OrderItem
model-desc: 订单明细
only-repository: true
- model-name: Payment
model-desc: 支付记录
create-controller: falseeasyfk:
config:
generator:
project:
project-dir: D:\workspace\projects
group-id: com.example
project-name: my-app
base-package: com.example.myapp
project-type: single
app-type: BMS
code:
module-name: myapp
db-type: MYSQL
db-short-url: localhost:3306/my_database
db-user: root
db-pwd: 123456
table-prefix: base_
from-db-tables: base_product,base_category,base_brand工作原理:
DatabaseMetaData 获取表结构(字段名、类型、注释、主键等)base_product → Product)product_name → productName)@Schema 和 @Column 的描述easyfk:
config:
generator:
project:
project-dir: D:\workspace\projects
group-id: com.mcst
project-name: user
base-package: com.mcst.user
project-type: smart
prd-type: separation
build-type: gradle
app-type: BMS
code:
module-name: user
db-short-url: localhost:3306/user_db
db-pwd: 123456
create-resource-annotation: true
resource-group: userManagement
resource-id: userManagement
resource-name: 用户管理
resource-path: /user
resource-sort: 80000
module-resource-sort: 10000
increment-star: 100
model-list:
- model-name: UserInfo
model-desc: 会员
- model-name: UserAddress
model-desc: 收货地址
- model-name: UserAccount
model-desc: 账号排序值自动计算:
modelResourceSort = 10000 + 100 = 10100modelResourceSort = 10000 + 200 = 10200modelResourceSort = 10000 + 300 = 10300无论是 CLI 的 generator.yml 还是 IDEA 插件的可视化配置,底层配置结构完全一致,均位于 easyfk.config.generator 节点下:
easyfk:
config:
generator:
project: # 项目配置
...
code: # 代码配置
....easyfk-generator.json 文件,与 YAML 配置内容等价。配置前缀:easyfk.config.generator.project
| 配置项 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| project-dir | 是 | String | - | 项目输出根目录。例:D:\workspace\projects |
| group-id | 是 | String | - | Maven groupId,例:com.example |
| project-name | 是 | String | - | 项目名称,同时作为项目根目录名和各子模块名前缀。例:my-app |
| base-package | 是 | String | - | Java 包根路径。例:com.example.myapp |
| project-type | 否 | 枚举 | smart | 项目架构类型:single / microservice / smart |
| rpc-type | 否 | 枚举 | cloud | RPC 类型,仅 microservice 时生效。cloud / dubbo |
| build-type | 否 | 枚举 | maven | 构建工具:maven → pom.xml;gradle → build.gradle |
| gradle-type | 否 | 枚举 | groovy | Gradle DSL 类型,仅 build-type: gradle 时生效。groovy / kotlin |
| orm-type | 否 | 枚举 | MYBATIS | ORM 框架:MYBATIS / MYBATIS_FLEX / HIBERNATE |
| prd-type | 否 | 枚举 | none | PRD / Controller 层策略:none / single / separation |
| log-type | 否 | 枚举 | LOGBACK | 日志框架:LOGBACK / LOG4J2 |
| framework-version | 否 | String | 3.2.12 | EasyFK 框架版本号 |
| project-version | 否 | String | 1.0.0-SNAPSHOT | 生成的项目版本号 |
| app-type | 是 | 枚举 | - | 应用类型,决定生成的项目模板和配置风格。可选值:BMS(后台管理端)、CLIENT(面向 C 端) |
| create-prd-project | 否 | Boolean | true | 是否生成 PRD(Controller)子项目 |
| create-repository | 否 | Boolean | false | 是否生成独立的 Repository 子项目 |
| controller-auto-config | 否 | Boolean | false | 是否为 Controller 层生成 AutoConfiguration 自动装配配置 |
| 值 | 说明 |
|---|---|
| single | 单体项目,所有代码在一个工程中,无子模块拆分 |
| microservice | 标准微服务架构,生成 API + Server + PRD 模块,支持选择一种 RPC 方式(Cloud 或 Dubbo) |
| smart | 多栈微服务,在 microservice 基础上同时生成 Spring Cloud 和 Dubbo 两套 RPC 远程调用通道 |
配置前缀:easyfk.config.generator.code
| 配置项 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| module-name | 是 | String | - | 模块名称,用于配置类名、远程调用 serviceId、Controller 路径前缀等。例:myapp |
| author | 否 | String | eb-jack | 代码注释中的作者信息 |
| orm-type | 否 | 枚举 | MYBATIS | ORM 类型:MYBATIS / MYBATIS_FLEX / HIBERNATE |
| spring-annotation | 否 | Boolean | true | 是否在实现类上添加 Spring 注解(如 @Repository、@Service)。project-type 为 smart 时无效 |
| create-controller | 否 | Boolean | true | 是否生成 Controller 层代码(全局控制,可被 Model 级别覆盖) |
| extends-supper-class | 否 | Boolean | true | Entity 是否继承框架基类,基类提供 deleted、insertTime、lastUpdateTime 字段 |
| 配置项 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| db-type | 否 | 枚举 | MYSQL | 数据库类型 |
| db-short-url | 条件必填 | String | - | 数据库短连接地址,格式:host:port/database。仅使用 from-db-tables 时必填 |
| db-user | 否 | String | root | 数据库用户名 |
| db-pwd | 条件必填 | String | - | 数据库密码。仅使用 from-db-tables 时必填 |
db-short-url 只需填写 host:port/database 部分,生成器会自动拼接完整的 JDBC URL。例如 MySQL 会自动拼接为 jdbc:mysql://host:port/database?characterEncoding=UTF-8&useSSL=false&...| 配置项 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| table-prefix | 否 | String | - | 全局表名前缀,生成类名时自动去除。例:配置 base_,表 base_product → 类名 Product |
| from-db-tables | 否 | String | - | 需要从数据库读取结构的表名列表,逗号分隔。例:product,order,user_info |
Model 定义在 code.model-list 节点下,是一个列表。每个 Model 对应数据库中的一张表,也对应生成的一组完整分层代码。
code:
model-list:
- model-name: Product
model-desc: 商品信息
# ... 更多配置
- model-name: Order
model-desc: 订单信息| 配置项 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| model-name | 是 | String | - | 模型名称,大驼峰命名。对应所有类名前缀 |
| model-desc | 否 | String | - | 模型中文描述,用于代码注释、Swagger 文档描述等 |
| table-name | 否 | String | 自动推导 | 对应的数据库表名。不填则根据 model-name 自动推导 |
| id-type | 否 | String | String | 主键字段的 Java 类型:String 或 Long |
| id-is-auto | 否 | Boolean | false | 主键是否自增 |
| super-class | 否 | String | BaseMyBatisPlusEntity | Entity 父类的完全限定类名 |
| only-repository | 否 | Boolean | false | 是否只生成 Repository 层 |
| create-controller | 否 | Boolean | true | 是否为该 Model 生成 Controller |
| table-prefix | 否 | String | 继承全局 | 该 Model 专属的表前缀 |
| forbidden-filed | 否 | String | - | 禁用字段名(如 status),设置后 Controller 生成启用/禁用接口 |
| resource-group | 否 | String | 继承全局 | 该 Model 的资源权限分组 |
| resource-name | 否 | String | 继承全局 | 该 Model 的资源权限名称 |
| resource-id | 否 | String | 继承全局 | 该 Model 的资源权限 ID |
| resource-path | 否 | String | 继承全局 | 该 Model 的资源权限前端路由路径 |
| resource-sort | 否 | Integer | 继承全局 | 资源组排序值 |
| model-resource-sort | 否 | Integer | 自动计算 | 当前 Model 的资源排序值 |
from-db-tables 自动从数据库读取表结构生成 Model 信息。如果同一个 Model 在 model-list 中也有定义,则 model-list 中的配置作为覆盖项优先生效。配置前缀:easyfk.config.generator.code
| 配置项 | 必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| create-resource-annotation | 否 | Boolean | false | 总开关:是否生成资源权限注解 |
| resource-group | 否 | String | - | 资源所属分组标识 |
| resource-name | 否 | String | - | 资源所属分组的显示名称 |
| resource-id | 否 | String | - | 资源分组 ID |
| resource-path | 否 | String | - | 资源分组对应的前端路由路径 |
| resource-sort | 否 | Integer | 10000 | 资源分组的排序基础值 |
| module-resource-sort | 否 | Integer | 10000 | 各 Model 资源排序的起始值 |
| increment-star | 否 | Integer | 100 | 多个 Model 之间排序值的自增步长 |
启用后生成的 Controller 示例注解:
@ResourceController(group = "operationSetting", id = "operationSetting",
name = "运营管理", sort = 81000, path = "/operation")
public class ProductController {
@AuthResource(id = "productManage", name = "商品管理",
pId = "operationSetting", pName = "运营管理",
sort = 10100, path = "/operation/product",
category = ResourceCategory.menu)
public ResponseResult<List<ProductResp>> queryPage(...) { ... }
}EasyFK Generator 内置四种项目架构,覆盖从小型工具到大型平台的不同场景。
适用场景: 中小型项目、快速原型验证、内部工具系统
配置: project-type: single
生成的项目结构:
my-app/
├── pom.xml (或 build.gradle)
├── src/main/java/com/example/myapp/
│ ├── ServerApp.java # 启动类
│ ├── controller/
│ │ └── ProductController.java # Controller(直接调用 Service)
│ ├── api/
│ │ ├── dto/ProductDto.java # DTO
│ │ ├── param/ProductParam.java # 查询参数
│ │ ├── request/
│ │ │ ├── ProductReq.java # 请求对象
│ │ │ └── ProductEditReq.java # 编辑请求对象
│ │ └── response/ProductResp.java # 响应对象
│ └── service/
│ ├── IProductService.java # 服务接口
│ ├── impl/ProductServiceImpl.java # 服务实现
│ ├── persistence/
│ │ ├── model/Product.java # Entity
│ │ └── mapper/ProductMapper.java # Mapper 接口
│ └── repository/
│ ├── IProductRepository.java # 仓储接口
│ └── impl/ProductRepositoryImpl.java # 仓储实现
├── src/main/resources/
│ └── mappings/ProductMapper.xml # Mapper XML
└── config/
├── application.yml
├── application-dev.yml
├── application-test.yml
├── application-prod.yml
└── logback.xml (或 log4j2.xml){basePackage}.service 代替 {basePackage}.server{basePackage}.api适用场景: BMS 后台管理端、ToC 端的接口网关项目,仅提供 REST API 接口,本身无业务逻辑,通过 RPC 调用后端微服务获取数据
配置: project-type: micro_prd,rpc-type: cloud 或 dubbo(必选)
生成的项目结构:
my-app/
├── pom.xml (或 build.gradle + settings.gradle)
├── src/main/java/com/example/myapp/
│ └── MyappPrdApp.java # 启动类(含 RPC 注解)
└── config/
├── application.yml
├── application-dev.yml
├── application-test.yml
├── application-prod.yml
└── logback.xml (或 log4j2.xml)运行时引入各业务模块的 API 接口项目(如 xxx-cloud-api 或 xxx-dubbo-api),通过 RPC 进行远程调用web-prd、doc-knife4j、registry-nacos、rpc-${rpcType} 等依赖auth-prd(BMS 时)和 auth-${rpcType}-api(认证模块的 RPC 接口)适用场景: 标准微服务拆分,使用单一 RPC 协议(Spring Cloud 或 Dubbo)
配置: project-type: microservice,rpc-type: cloud 或 dubbo
生成的项目结构(以 Spring Cloud 为例):
my-app/
├── pom.xml (或 build.gradle + settings.gradle) # 父工程
│
├── my-app-api/ # API 定义模块
│ ├── pom.xml
│ └── src/main/java/com/example/myapp/api/
│ ├── IProductApi.java # API 接口(仅 SMART 架构生成)
│ ├── dto/ProductDto.java
│ ├── param/ProductParam.java
│ ├── request/
│ │ ├── ProductReq.java
│ │ └── ProductEditReq.java
│ └── response/ProductResp.java
│
├── my-app-server/ # 服务实现模块
│ ├── pom.xml
│ ├── src/main/java/com/example/myapp/
│ │ ├── ServerApp.java # 启动类
│ │ └── server/
│ │ ├── persistence/model/Product.java
│ │ ├── persistence/mapper/ProductMapper.java
│ │ ├── repository/
│ │ │ ├── IProductRepository.java
│ │ │ └── impl/ProductRepositoryImpl.java
│ │ ├── service/
│ │ │ ├── IProductService.java
│ │ │ └── impl/ProductServiceImpl.java
│ │ └── impl/
│ │ └── ProductRemoteImpl.java # RPC 实现
│ ├── src/main/resources/mappings/ProductMapper.xml
│ └── config/
│ ├── application.yml / -dev.yml / -test.yml / -prod.yml
│ └── logback.xml
│
└── my-app-prd/ # PRD 层(Controller)
├── pom.xml
└── src/main/java/com/example/myapp/
├── ClientApp.java # 启动类
└── controller/
└── ProductController.java # Controller(通过 Remote 调用 Server)当 prd-type: separation 时,PRD 层会分为两个独立项目(与 server 平级):
my-app/
├── ...
├── my-app-prd-client/ # C 端 / 用户端 Controller
│ ├── ClientApp.java
│ └── controller/ProductController.java
└── my-app-prd-bms/ # B 端 / 管理后台 Controller
├── BmsApp.java
└── controller/ProductBmsController.java适用场景: 大型平台项目,需要同时支持 Spring Cloud 和 Dubbo 两种 RPC 协议
配置: project-type: smart
生成的项目结构:
my-app/
├── pom.xml
│
├── my-app-api/ # API 定义模块
│ └── com/example/myapp/api/
│ ├── IProductApi.java # 统一 API 接口
│ ├── dto/ProductDto.java
│ ├── param/ProductParam.java
│ ├── request/ProductReq.java / ProductEditReq.java
│ └── response/ProductResp.java
│
├── my-app-server/ # 服务实现模块
│ └── com/example/myapp/server/
│ ├── persistence/model/Product.java
│ ├── persistence/mapper/ProductMapper.java
│ ├── repository/IProductRepository.java + impl/
│ ├── service/IProductService.java + impl/
│ ├── impl/ProductApiServerImpl.java # API 服务端实现
│ └── config/MyappServerConfig.java # 自动装配配置
│
├── my-app-remote/ # 远程调用模块(父项目)
│ │
│ ├── my-app-cloud-api/ # Spring Cloud 客户端
│ │ └── com/example/myapp/remote/
│ │ ├── IProductRemote.java # Feign 接口
│ │ ├── impl/ProductApiScImpl.java # API 的 SC 实现
│ │ ├── properties/MyappApiProperties.java # 配置属性
│ │ └── config/MyappApiConfig.java # 自动装配
│ │
│ ├── my-app-cloud-provider/ # Spring Cloud 服务提供者
│ │ └── com/example/myapp/remote/provider/
│ │ └── impl/ProductRemoteImpl.java # Remote 实现
│ │
│ ├── my-app-dubbo-api/ # Dubbo 客户端
│ │ └── com/example/myapp/remote/
│ │ ├── IProductRemote.java # Dubbo 接口
│ │ └── impl/ProductApiDubboImpl.java # API 的 Dubbo 实现
│ │
│ └── my-app-dubbo-provider/ # Dubbo 服务提供者
│ └── com/example/myapp/remote/provider/
│ └── impl/ProductRemoteImpl.java
│
├── my-app-prd-client/ # PRD / Controller 层(C 端)
│ └── controller/ProductController.java
│
└── my-app-prd-bms/ # PRD / Controller 层(B 端)
└── controller/ProductBmsController.javaIProductApi 接口ProductApiServerImpl(本地直接调用 Service)ProductApiScImpl(通过 Feign 远程调用)ProductApiDubboImpl(通过 Dubbo 远程调用)四种内置架构并非固定不变的模板,而是通过多个配置维度的组合来决定最终生成的项目结构。开发团队可以根据业务需求,灵活调整以下配置维度来定制适合自己的项目架构。
通过 project-type + prd-type 的组合:
| project-type | prd-type | 生成的子模块 |
|---|---|---|
| single | (不适用) | 单一工程,所有代码在一个项目中 |
| micro_prd | (不适用) | 单一工程,仅启动类 + 配置文件,无业务代码 |
| microservice | none | api + server(无 Controller 层项目) |
| microservice | single | api + server + prd |
| microservice | separation | api + server + prd-client + prd-bms |
| smart | none | api + server + remote(含 cloud/dubbo 四个子模块) |
| smart | single | api + server + remote + prd |
| smart | separation | api + server + remote + prd-client + prd-bms |
microservice + prd-type: none 即可。| build-type | 生成的构建文件 |
|---|---|
| maven | pom.xml |
| gradle | build.gradle + settings.gradle(Groovy DSL) |
| 配置项 | 影响范围 |
|---|---|
| orm-type | 持久化依赖和 Entity 代码风格:MyBatis-Plus(默认)→ @TableName + BaseMapper;MyBatis-Flex → Flex 风格注解;Hibernate → JPA 注解 |
| rpc-type | MICROSERVICE 和 MICRO_PRD 架构生效(MICRO_PRD 时必选),决定 RPC 调用方式和相关依赖 |
| log-type | 日志配置文件:logback.xml 或 log4j2.xml |
| db-type | 构建文件中的数据库驱动依赖(如 MySQL / PostgreSQL),以及 JDBC URL 拼接规则 |
| include-auth | 是否在构建文件中引入 EasyFK 框架的 auth 权限模块依赖 |
| 配置项 | 作用域 | 说明 |
|---|---|---|
| only-repository | Model 级 | 设为 true 时只生成 Entity + Mapper + Repository + DTO,不生成 Service / API / Controller / Remote |
| create-controller | 全局 / Model 级 | 控制是否生成 Controller 层代码,Model 级配置优先于全局配置 |
| controller-auto-config | 全局 | SMART 架构下,是否为 Controller 层额外生成 Spring Boot AutoConfiguration 自动装配配置 |
场景一:纯后端微服务(无 Controller)
project-type: microservice
rpc-type: cloud
prd-type: none # 不生成 PRD(Controller)子项目场景二:SMART 架构 + 部分 Model 只要数据层
project-type: smart
prd-type: separation
code:
model-list:
- model-name: Order
model-desc: 订单
- model-name: OrderItem
model-desc: 订单明细
only-repository: true # 只生成数据访问层
- model-name: Payment
model-desc: 支付记录
create-controller: false # 有 Service 但不生成 Controller场景三:单体项目使用 Gradle + MyBatis-Flex
project-type: single
build-type: gradle
orm-type: MYBATIS_FLEX
app-type: BMSproject-type 等组合配置,可灵活定制业务场景需求。以下以 Model 名为 Product、模块名为 myapp 为例说明生成的各层代码。
文件: Product.java 位置: {server}/persistence/model/
生成 MyBatis-Plus(默认):
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("product")
@AutoMapper(target = ProductDto.class)
public class Product extends BaseMyBatisPlusEntity<Product> {
@PrimaryKey
@TableId(type = IdType.ASSIGN_UUID)
@EntityColumn(comment = "商品信息ID")
private String productId;
@EntityColumn(comment = "商品名称")
private String productName;
@EntityColumn(comment = "商品价格")
private BigDecimal price;
}Mapper 接口: ProductMapper.java
public interface ProductMapper extends BaseMapper<Product> {
}Mapper XML: ProductMapper.xml — 位于 resources/mappings/ 目录
文件: ProductDto.java 位置: {api}/dto/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Schema(description = "商品信息数据对象")
@SuperBuilder
@NoArgsConstructor
public class ProductDto extends BaseDto {
@PrimaryKey
@Schema(description = "商品信息ID")
private String productId;
@Schema(description = "商品名称")
private String productName;
@Schema(description = "商品价格")
private BigDecimal price;
}文件: ProductParam.java 位置: {api}/param/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@Schema(description = "商品信息数据参数对象")
@SuperBuilder
@NoArgsConstructor
public class ProductParam extends BasicParam {
@Schema(description = "商品名称")
private String productName;
@Schema(description = "商品价格")
private BigDecimal price;
}文件: ProductReq.java
public class ProductReq extends ProductParam {
}文件: ProductResp.java
public class ProductResp extends ProductDto {
}文件: ProductEditReq.java
public class ProductEditReq extends ProductDto {
}接口: IProductRepository.java
public interface IProductRepository extends IBaseRepository<ProductDto, String> {
}实现: ProductRepositoryImpl.java
@Repository
public class ProductRepositoryImpl
extends BaseMyBatisRepositoryImpl<ProductMapper, ProductDto, Product, String>
implements IProductRepository {
}接口: IProductService.java
public interface IProductService extends IBaseService<ProductResp, String, ProductReq> {
}仅 SMART 架构生成。
文件: IProductApi.java
public interface IProductApi extends IBaseApi<ProductResp, String, ProductReq> {
}| project-type | prd-type | 生成的 Controller |
|---|---|---|
| single | single | 直接注入 IProductService,本地调用 |
| microservice + cloud | single | 注入 Remote 接口(Feign),远程调用 |
| microservice + dubbo | single | 注入 Remote 接口(Dubbo),远程调用 |
| smart | single | 注入 IProductApi,具体实现由自动装配决定 |
| 任意 | separation | 同时生成 ProductController(C 端)和 ProductBmsController(B 端) |
@FeignClient(value = "${easyfk.config.remote.myapp.service-id:server}",
path = "${easyfk.config.remote.myapp.base-path:/remote}/myapp/product")
public interface IProductRemote extends IBaseRemote<ProductResp, String, ProductReq> {
}public interface IProductRemote extends IDubboBaseRemote<ProductResp, String, ProductReq> {
}主要用于 SMART 架构,以及启用了 controller-auto-config 的微服务架构。自动为 Server、API、Provider 及 Controller 模块生成自动装配类并注册配置。
非 SINGLE 架构会生成单独的启动类,例如 ServerApp.java、ClientApp.java 等,以及各环境适用的配置和日志文件。
支持多达 22 种数据库:MYSQL, MARIADB, POSTGRE_SQL, ORACLE, ORACLE_12C, SQL_SERVER 等等。
| 数据库字段类型 | Java 类型 |
|---|---|
| DATETIME, TIMESTAMP | LocalDateTime |
| DATE | LocalDate |
| TIME | LocalTime |
| DECIMAL, NUMERIC | BigDecimal |
| TINYINT, BOOLEAN, BIT | Boolean |
| INT, INT4, INTEGER | Integer |
| BIGINT, NUMBER, INT8 | Long |
| DOUBLE, FLOAT | Double |
| VARCHAR, CHAR, TEXT, CLOB | String |
在已生成的 Entity 文件中,可以手动添加以下 EasyFK 框架提供的自定义注解,再次执行代码生成即可应用到各层中。
@SingleUniqueField(repetitionMsg = "商品名称已存在")
@EntityColumn(comment = "商品名称")
private String productName;@CombUniqueField(repetitionMsg = "该分类下已存在同名商品", combinationField = "categoryId")
private String productName;@BetweenConditionField
private LocalDateTime createTime;会自动生成 createTimeStart 和 createTimeEnd 查询字段。
@ForbiddenField(value = "forbidden")标注在 Entity 类上,会自动生成启用/禁用功能。
| 策略 | 涉及文件 | 行为 |
|---|---|---|
| 不存在才创建 | Mapper 接口/XML, Repository, Service, API, Controller, Remote, Req/Resp, 启动类, 配置文件 | 文件已存在则跳过,绝不覆盖 |
| 删除后重建 | Entity, DTO, Param, AutoConfiguration 配置类 | 每次生成都会删除旧文件并重新生成 |
请安装 JDK 21 或更高版本:adoptium.net
安装后确认 java -version 输出的版本 >= 21。
不会(大部分情况下)。
| 特性 | from-db-tables | model-list |
|---|---|---|
| 字段信息来源 | 自动从数据库读取 | 手动定义或配合 from-db-tables 使用 |
| 是否需要数据库连接 | 是 | 否 |
| 字段类型/注释 | 自动解析 | 无法定义字段(仅定义 Model 级配置) |
| 适用场景 | 表已经在数据库中存在 | 设计阶段、无法连接数据库、或需要覆盖默认值 |
两者可同时使用。相同 Model 在两处都有定义时,model-list 中的配置优先。
支持 22 种数据库,完整列表见上方章节“8.1 支持的数据库”。
完全一致。CLI 的 generator.yml 和 Spring Boot 的 application.yml 使用相同的配置节点结构。
在 model-list 中为特定 Model 设置 create-controller: false。
在 model-list 中设置 only-repository: true。
| 父类 | 包含的公共字段 |
|---|---|
| BaseMyBatisPlusEntity(默认) | deleted、insertTime、lastUpdateTime |
| BaseMyBatisPlusSimpleEntity | 无公共字段(适用于关联表等简单场景) |
生成器按规则自动处理:
table-prefix也可在 model-list 中通过 table-name 显式指定表名。
SMART 架构同时生成了 Spring Cloud 和 Dubbo 两套实现。切换方式通过改变依赖:
xxx-cloud-api 依赖 → 使用 Spring Cloud Feign 远程调用xxx-dubbo-api 依赖 → 使用 Dubbo 远程调用xxx-server 依赖 → 本地直接调用(用于单体部署场景)无需修改任何业务代码。
可能是由于网络原因或插件市场索引延迟。可以从上方章节“3.1 插件安装”里的链接手动下载并安装。
| 配置项 | 可选值 | 说明 |
|---|---|---|
| project-type | single, micro_prd, microservice, smart | 项目架构类型 |
| app-type | BMS, CLIENT | 应用类型 |
| rpc-type | cloud, dubbo | RPC 协议类型 |
| build-type | maven, gradle | 构建工具 |
| gradle-type | groovy, kotlin | Gradle DSL 类型 |
| orm-type | MYBATIS, MYBATIS_FLEX, HIBERNATE | ORM 框架 |
| prd-type | none, single, separation | PRD 层策略 |
| log-type | LOGBACK, LOG4J2 | 日志框架 |
| db-type | MYSQL, POSTGRE_SQL, ORACLE 等... | 数据库类型,支持 22+ 种常见数据库 |
以下是一个 Model(如 Product)在不同架构下可能生成的全部文件:
| 文件 | SINGLE | MICRO_PRD | MICRO | SMART | 覆盖策略 |
|---|---|---|---|---|---|
| PrdApp.java(启动类) | ❌ | ✅ | ❌ | ❌ | 不覆盖 |
| application.yml(配置文件) | ✅ | ✅ | ✅ | ✅ | 不覆盖 |
| logback.xml(日志配置) | ✅ | ✅ | ✅ | ✅ | 不覆盖 |
| Product.java(Entity) | ✅ | ❌ | ✅ | ✅ | 强制刷新 |
| ProductMapper.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductMapper.xml | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductDto.java | ✅ | ❌ | ✅ | ✅ | 强制刷新 |
| ProductParam.java | ✅ | ❌ | ✅ | ✅ | 强制刷新 |
| ProductReq.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductResp.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductEditReq.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| IProductRepository.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductRepositoryImpl.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| IProductService.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductServiceImpl.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| IProductApi.java | ❌ | ❌ | ❌ | ✅ | 不覆盖 |
| ProductApiServerImpl.java | ❌ | ❌ | ❌ | ✅ | 不覆盖 |
| IProductRemote.java(Cloud) | ❌ | ❌ | ✅★ | ✅ | 不覆盖 |
| ProductRemoteImpl.java(Cloud) | ❌ | ❌ | ✅★ | ✅ | 不覆盖 |
| ProductApiScImpl.java | ❌ | ❌ | ❌ | ✅ | 不覆盖 |
| IProductRemote.java(Dubbo) | ❌ | ❌ | ✅★ | ✅ | 不覆盖 |
| ProductRemoteImpl.java(Dubbo) | ❌ | ❌ | ✅★ | ✅ | 不覆盖 |
| ProductApiDubboImpl.java | ❌ | ❌ | ❌ | ✅ | 不覆盖 |
| ProductController.java | ✅ | ❌ | ✅ | ✅ | 不覆盖 |
| ProductBmsController.java | ❌ | ❌ | ✅★★ | ✅★★ | 不覆盖 |
★ MICROSERVICE 架构下根据 rpc-type 只生成 Cloud 或 Dubbo 其中一套
★★ 仅当 prd-type: separation 时生成
EasyFK Generator v3.2.12(插件 v1.0.2)— 让架构设计直接变成可运行的代码。