你每次让 Claude Code 生成 CRUD,都要重复差不多的 Prompt——“参照 UserController 风格,包含 Entity、Mapper、Service、Controller、DTO,做完跑测试”。这篇文章教你用 Skill 把这套流程固化下来——以后说"为 xx 表生成 CRUD"就够了。


Skill 是什么

Skill 是一个 Markdown 文件,放在项目的 .claude/skills/ 目录下。它定义了一类任务的执行流程——什么时候触发、按什么步骤做、有什么注意事项。

Claude Code 在对话启动时自动加载项目里的所有 Skill,遇到匹配的任务就按你定义的流程执行。

它本质上就是把你的 Prompt 模板操作规范 打包成了一个可复用的文件。


创建你的第一个 Skill

假设你的 Java 项目经常要生成 CRUD 代码。创建一个标准化的 CRUD 生成 Skill。

第一步:建目录和文件

在项目根目录下创建:

.claude/skills/java-crud/SKILL.md

第二步:写 SKILL.md

---
name: java-crud-generator
description: 为 MyBatis-Plus 项目生成完整 Java CRUD 代码
---

# Java CRUD Generator

## 何时使用
- 用户说"生成 CRUD"、"创建新模块"、"新建实体"
- 用户提到具体表名并要求生成代码

## 执行步骤
1. 如果用户没提供表名和字段,先向用户确认
2. 读取 CLAUDE.md 了解技术栈和编码规范
3. 参照项目里已有的 Controller 确定代码风格
4. 按此顺序生成:
   Entity → Mapper → Service + ServiceImpl →
   Controller → SaveDTO、UpdateDTO、QueryDTO、VO
5. 所有代码必须符合 CLAUDE.md 里的规范
6. 生成完毕后提示用户运行测试验证

## 注意事项
- 使用构造器注入,禁止 @Autowired
- MyBatis-Plus 用 LambdaQueryWrapper
- 统一返回 Result<T>,分页返回 PageResult<T>
- 时间字段用 LocalDateTime,金额用 BigDecimal

文件分两部分:--- 包裹的元数据(name 和 description 必填),以及下面的执行指令。

description 决定了 Skill 何时被触发。Claude Code 根据 description 来判断当前任务是否匹配这个 Skill。description 要写清楚"用户说了什么才触发",而不是简单的分类标签。写得太模糊(比如只写"代码生成")可能导致 Skill 永远不会被自动激活。

第三步:验证 Skill 是否生效

保存文件后重启 Claude Code(或新开一个对话),输入:

> 你加载了哪些 Skill

如果看到 java-crud-generator 出现在列表中,说明 Skill 生效了。也可以直接说"为 xxx 表生成 CRUD",看它是否按你定义的流程执行。


效果对比

没有 Skill 的时候,每次都要写这样的 Prompt:

> 为 sys_product 表生成一套完整的 CRUD。
  包括 Entity、Mapper、Service、ServiceImpl、Controller、
  SaveDTO、UpdateDTO、QueryDTO、VO。
  参照 DeptController 的代码风格。
  用构造器注入不要 @Autowired,MyBatis-Plus 用 LambdaQueryWrapper。
  统一返回 Result<T>,分页用 PageResult<T>。
  时间用 LocalDateTime,金额用 BigDecimal。
  做完跑 mvn test 验证。

有了 Skill 之后,只需要一句话:

> 为 sys_product 表生成 CRUD

Claude Code 自动读取 Skill,按你定义的步骤执行:确认表结构 → 读 CLAUDE.md 了解规范 → 参照已有代码确定风格 → 按顺序生成 → 提醒跑测试。


Skill 的目录结构

.claude/skills/
├── java-crud/
│   └── SKILL.md           # CRUD 生成
├── code-review/
│   └── SKILL.md           # 代码审查
└── write-tests/
    └── SKILL.md           # 单元测试生成

每个 Skill 一个子目录,里面一个 SKILL.md(文件名必须叫 SKILL.md)。项目级的 .claude/skills/ 可以随 Git 提交,团队成员共享。

用户级 Skills:如果你想让某个 Skill 在所有项目中生效,放到 ~/.claude/skills/ 下。比如通用的 Code Review 规范、通用的测试生成模板,可以放用户级。跟某个项目技术栈强相关的(比如 MyBatis-Plus CRUD)放项目级。


还能用 Skill 做什么

Code Review Skill

---
name: java-code-review
description: 按团队标准审查 Java 代码变更
---

## 执行步骤
1. 用 git diff 查看未提交的变更
2. 重点检查:空指针风险、事务边界、SQL 注入、异常处理
3. 输出按严重程度分三级:高危(必须改)/ 建议 / 风格
4. 每个问题给出具体的修复代码

单元测试生成 Skill

---
name: unit-test-generator
description: 为 Service 类生成完整单元测试
---

## 执行步骤
1. 先读取目标 Service 类,分析所有 public 方法
2. 为每个方法生成正常/异常/边界三类用例
3. 使用 Mockito,Mock 所有外部依赖
4. 使用 @ExtendWith(MockitoExtension.class)
5. 生成完后跑 mvn test -Dtest=xxxTest 验证

注意事项

  • Skill 不是万能的:它定义的是流程,不是魔法。任务太复杂的话 Skill 也帮不了你——但它能让 90% 的重复任务变得简单。
  • 保持简单:每个 Skill 专注一类任务,不要试图把整个项目文档塞进去。
  • 随项目提交.claude/skills/ 放 Git 里,新人拉代码就能用。

总结

  1. Skill = Prompt 模板 + 操作规范,打包成可复用文件
  2. 放在 .claude/skills/<名称>/SKILL.md
  3. 元数据写 name 和 description,正文写执行步骤
  4. 随 Git 提交,团队共享
  5. 一次写好,以后同类任务一句话触发

把最常重复的那几个任务(CRUD、测试、审查)做成 Skill,每天能省不少打字时间。


系列文章

  • 第一篇:用 CC Switch 接入 DeepSeek,API 费用降低 90%
  • 第二篇:CLAUDE.md 写法详解
  • 第三篇:10 个必学斜杠命令
  • 第四篇:2026 安装教程(原生安装器)
  • 第五篇:第一次对话——5 个实战场景
  • 第六篇:Prompt 公式与模板
  • 第七篇:权限系统配置实战
  • 第八篇:Haiku / Sonnet / Opus 模型对比
  • 第九篇(本文):Skills 实战——创建可复用技能包
  • 下一篇:MCP 实战——连接数据库,AI 自动读表生成代码

更多推荐