用 Claude Code 写 CRUD 是真的快——但它每次都问差不多的问题,你也得每次写差不多的 Prompt。"参照 UserController、用构造器注入、别用 @Autowired、统一返回 Result"——这些话我大概重复了几十遍。
后来发现了 Skills,把这套流程固化成文件,以后说一句"为 xx 表生成 CRUD"它就自己按流程走。这篇文章分享一下怎么创建自己的 Skill。
Skill 本质上是什么
就是一个 Markdown 文件,放在项目的 .claude/skills/ 目录下。里面写清楚:什么时候触发、按什么步骤执行、有什么注意事项。
Claude Code 启动时自动加载项目里的所有 Skill,遇到匹配的任务就按你定义的流程走。
你可以把它理解为:把 Prompt 模板 + 操作规范 打包成了一个可复用的文件。
手把手创建第一个 Skill
我的 Java 项目用 MyBatis-Plus,经常要生成 CRUD。下面是我实际在用的 Skill。
1. 建目录
在项目根目录:
.claude/skills/java-crud/SKILL.md
文件名必须叫 SKILL.md,目录名自定义。
description 是关键——它不是简单的标签,而是告诉 Claude Code "什么时候该激活这个 Skill"。Claude Code 根据 description 来匹配当前对话是否应该用这个 Skill。写得太模糊(比如只写"写代码"),Skill 可能永远不会被自动触发。要写清楚触发条件,比如"用户说要生成 CRUD、创建新模块、新建实体"。
2. 写内容
---
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
3. 使用
以前你需要写一大段 Prompt。现在:
> 为 sys_product 表生成 CRUD
Claude Code 读到这条,匹配到 java-crud-generator Skill,自动按步骤执行——确认表结构、读规范、参照已有代码、按顺序生成文件、提醒跑测试。你不用每次重复那些规范了。
怎么确认 Skill 生效了:重启 Claude Code 或新开对话,输入"你加载了哪些 Skill"。如果列表里出现 java-crud-generator,说明成了。也可以直接试一句"为 test_table 生成 CRUD",看它是不是按你定义的步骤走。
还可以做哪些 Skill
Code Review:
---
name: java-code-review
description: 按团队标准审查 Java 代码变更
---
## 执行步骤
1. 用 git diff 查看未提交的变更
2. 重点检查:空指针风险、事务边界、SQL 注入、异常处理
3. 输出按严重程度分三级:高危 / 建议 / 风格
4. 每个问题给出具体的修复代码
单元测试生成:
---
name: unit-test-generator
description: 为 Service 类生成完整单元测试
## 执行步骤
1. 读取目标 Service 类,分析所有 public 方法
2. 为每个方法生成正常/异常/边界三类用例
3. 使用 Mockito,Mock 所有外部依赖
4. 生成完后跑测试验证
团队共享
把 .claude/skills/ 目录提交到 Git:
git add .claude/skills/
git commit -m "添加项目 Skills:CRUD 生成、Code Review、单元测试"
新同事拉代码后 Claude Code 自动加载这些 Skill,标准流程直接上手,不需要老同事口头"传帮带"。
用户级 vs 项目级:.claude/skills/ 是项目级,随代码提交。如果你想在所有项目里用同一个 Skill(比如通用的 Code Review 标准),放到 ~/.claude/skills/ 下——用户级,全局生效。跟特定技术栈相关的(比如 MyBatis-Plus CRUD)放项目级更合适。
使用心得
Skills 不是银弹——它不能帮你解决没有标准流程的复杂任务。但对于那些每天都在做的重复性工作(CRUD、测试、Review),把流程固化下来省的时间很可观。
我个人的经验:从你最常重复的那个操作开始,先做一个 Skill。用几天觉得好,再做第二个。不要一上来就规划十个八个——很多你以为会常用的可能根本不常用。
总结
- Skill = Prompt 模板 + 操作规范,打包成
.claude/skills/xxx/SKILL.md - 元数据写 name 和 description,正文写执行步骤
- 随 Git 提交,团队共享
- 从最常重复的那个任务开始,做一个就赚一个
下一篇讲 MCP——让 Claude Code 直接连数据库读表结构,配合 Skills 一起用,一句"为 xx 表生成 CRUD"从查表到写代码全自动。
有用的话欢迎点赞收藏。