Loading...
Loading...
Scaffold a complete CRUD business module for Spring Boot + MyBatis-Plus layered architecture. Creates all 9 required files (Migration, Entity, Mapper, DTOs, Converter, Service, Facade, Controller) following established conventions. Use when creating a new business module, CRUD feature, or module scaffolding.
npx skill4agent add jianyun8023/my-skills java-crud-modulejava-architecture-guideStep 1: Migration SQL → 建表,定义数据模型
Step 2: Entity → 映射表结构到 Java 类
Step 3: Mapper → 空接口,继承 BaseMapper
Step 4: DTOs → 请求/响应对象
Step 5: Converter → MapStruct Entity ↔ DTO 转换
Step 6: Service 接口 → 定义业务方法签名
Step 7: Service 实现 → 实现业务逻辑
Step 8: Facade → 跨服务编排、事务管理
Step 9: Controller → HTTP 入口、参数校验AlertPolicyalert_policy| 文件 | 命名 | 包路径 |
|---|---|---|
| Migration | | |
| Entity | | |
| Mapper | | |
| Create DTO | | |
| Update DTO | | |
| Card DTO | | |
| Detail DTO | | |
| Converter | | |
| Service | | |
| Facade | | |
| Controller | | |
| API 路径 | | — |
dto/policy/dto/task/project/
├── {service-module}/src/main/java/com/example/service/
│ ├── entity/ # Step 2
│ ├── repository/ # Step 3 (Mapper)
│ ├── dto/
│ │ └── {module}/ # Step 4
│ ├── converter/ # Step 5
│ └── service/
│ └── impl/ # Step 6-7
├── {web-module}/src/main/java/com/example/web/
│ ├── facade/ # Step 8
│ └── controller/ # Step 9
└── migrations/{module}/scripts/ # Step 1java-db-migration@Data
@EqualsAndHashCode(callSuper = true)
@TableName("alert_policy")
public class AlertPolicy extends BizEntity {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@TableField("name")
private String name;
// 枚举字段
@TableField("status")
private PolicyStatusEnum status;
// JSON 字段
@TableField(value = "config_json", typeHandler = JacksonTypeHandler.class)
private Map<String, Object> configJson;
// 逻辑删除
@TableLogic
private Boolean deleted;
}@Mapper
public interface AlertPolicyMapper extends BaseMapper<AlertPolicy> {
// 空接口 - 不添加任何方法
}LambdaQueryWrapperjava-dto-converter// 接口
public interface PolicyService {
AlertPolicy getById(Long id);
Long create(PolicyCreateReq req);
void update(Long id, PolicyUpdateReq req);
void delete(Long id);
PageResult<PolicyCard> getPage(int page, int size, String name);
}
// 实现
@Slf4j
@Service
@RequiredArgsConstructor
public class PolicyServiceImpl implements PolicyService {
private final AlertPolicyMapper policyMapper;
private final PolicyConverter converter;
@Override
public AlertPolicy getById(Long id) {
AlertPolicy entity = policyMapper.selectById(id);
if (entity == null) {
throw new BusinessException(ErrorCode.POLICY_NOT_FOUND, "策略不存在: " + id);
}
return entity;
}
@Override
@Transactional(rollbackFor = Exception.class)
public Long create(PolicyCreateReq req) {
validateNameUnique(req.getName(), null);
AlertPolicy entity = converter.toEntity(req);
entity.setStatus(PolicyStatusEnum.DISABLED);
policyMapper.insert(entity);
return entity.getId();
}
}@Component
@Slf4j
@RequiredArgsConstructor
public class PolicyFacade {
private final PolicyService policyService;
private final TaskService taskService; // 可注入多个 Service
@Transactional(rollbackFor = Exception.class)
public Long create(PolicyCreateReq req) {
return policyService.create(req);
}
// 读操作:查询 + 丰富关联数据
public PolicyDetail getDetail(Long id) {
PolicyDetail detail = policyService.getDetail(id);
// 丰富关联数据
enrichWithRelatedData(detail);
return detail;
}
}java-api-endpoint