---
name: business-java-codegen
description: SpecPow business-java-codegen skill
---

# Java 代码生成

> 根据设计文档和数据库表结构，生成符合项目规范的 Java 后端代码（Entity/Mapper/Service/Controller 四层）

## 技术栈配置

本技能的**默认**技术栈为 MyBatis-Plus + Spring Boot，但会根据项目实际使用的框架自动适配：

- **ORM 框架** — 优先使用项目已有的 ORM（MyBatis-Plus / JPA / MyBatis / JDBC Template）
- **基类** — 扫描项目已有 BaseEntity、BaseController 等基类并继承
- **包名规范** — 从已有代码推断包结构，而非硬编码
- **返回格式** — 使用项目已有的统一返回类型（Result / Response / ApiResponse）

如果项目无已有代码可参考，则在阶段 1 询问用户确认技术选型。

## 触发条件

- 用户要求生成 Java 代码
- 执行 apply-change 时涉及后端任务
- 用户提到"生成接口"/"写 Service"/"创建 Controller"

## 铁律

1. **先查 DB 再生成** — 必须确认表结构已存在，字段名以数据库为准
2. **四层齐全** — Entity、Mapper(XML)、Service(Interface+Impl)、Controller 缺一不可
3. **不造轮子** — 使用项目已有的基类（BaseEntity、BaseController 等）
4. **注释完整** — 类注释、方法注释、关键逻辑行注释

## 工作流

### 阶段 1：上下文收集

1. 读取 design.md 获取接口定义和数据模型
2. 查询数据库表结构（DDL 或已有 Entity）
3. **扫描项目已有代码，识别技术栈**（ORM 框架、基类、包名、返回格式）
4. 如果项目无已有代码，询问用户确认技术选型

### 阶段 2：代码生成

按以下顺序生成：

**2.1 Entity（实体类）**
```
- 继承 BaseEntity（如有）
- 字段与数据库列一一对应
- 使用 @Table、@Column 注解
- 包含 getter/setter 或 @Data
```

**2.2 Mapper（数据访问层）**
```
- 继承 BaseMapper<T>（MyBatis-Plus）或对应基类
- 自定义 SQL 写在 XML 中
- 复杂查询方法命名：select + By + 条件
```

**2.3 Service（业务逻辑层）**
```
- 接口 + 实现分离
- 继承 IService<T> / ServiceImpl（如有基类）
- 事务注解 @Transactional 加在实现类方法上
- 业务异常使用自定义 BusinessException
```

**2.4 Controller（控制层）**
```
- 继承 BaseController（如有）
- RESTful 风格：GET 查询、POST 创建、PUT 更新、DELETE 删除
- 参数校验使用 @Valid + DTO
- 统一返回 Result<T> 格式
```

### 阶段 3：验证

1. 编译检查：确保无语法错误
2. 依赖检查：所有 import 可解析
3. 规范检查：命名、注释、分层符合规范

## 输出格式

每个文件输出时标注：
```
文件: src/main/java/com/company/xxx/entity/XxxEntity.java
类型: Entity
依赖: BaseEntity, Lombok
```

## 红旗（立即停止）

- 数据库表不存在 → 先执行 DB 设计
- 项目无基类且用户未指定 → 询问用户
- 发现已有同名类 → 报告冲突，不覆盖
