告别996!我用AI编程助手,每天省下2小时写代码
·
不是AI取代程序员,是会用AI的程序员取代不会用AI的程序员。这篇文章分享我每天用AI编程助手的真实工作流。
大家好,我是卷毛。
先用数据说话:
使用AI编程助手前后对比(我的真实数据):
使用前 使用后 节省
日均编码时间 8小时 6小时 2小时
写CRUD接口 40分钟/个 8分钟/个 32分钟
写单元测试 30分钟/个 8分钟/个 22分钟
Code Review 60分钟 35分钟 25分钟
调试排Bug 90分钟/个 45分钟/个 45分钟
写技术文档 60分钟 15分钟 45分钟
每月节省时间:约40小时 ≈ 5个工作日
这不是吹牛,这是我用了半年AI编程助手的真实数据。今天把我的工作流分享出来,每个场景都附具体操作步骤。
工具选择:我用什么?
日常开发主力:GitHub Copilot(IDEA插件)
→ 代码补全、生成测试、解释代码
复杂问题分析:DeepSeek / ChatGPT
→ 架构设计、技术选型、疑难杂症
代码审查:AI Code Review(GitHub Actions)
→ PR自动审查、安全漏洞检测
文档生成:Spring AI + ChatClient
→ 自动生成API文档、注释、变更日志
# 不需要全用,选1-2个趁手的就行
# 核心原则:AI是副驾驶,你才是主驾驶
场景一:快速写CRUD接口(省32分钟/个)
传统方式
1. 写Entity → 5分钟
2. 写Mapper → 5分钟
3. 写XML → 10分钟
4. 写Service → 8分钟
5. 写Controller → 7分钟
6. 写DTO → 5分钟
总计:40分钟
AI辅助方式
// Step 1: 用AI生成Entity
// 给AI提示:
// "生成一个订单实体类,字段包括:订单号、用户ID、商品名称、数量、金额、状态、创建时间、更新时间。使用JPA注解,状态用枚举。"
@Entity
@Table(name = "orders")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true, length = 32)
private String orderNo;
@Column(nullable = false)
private Long userId;
@Column(nullable = false, length = 128)
private String productName;
@Column(nullable = false)
private Integer quantity;
@Column(nullable = false, precision = 10, scale = 2)
private BigDecimal amount;
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 16)
private OrderStatus status;
@CreatedDate
private LocalDateTime createdAt;
@LastModifiedDate
private LocalDateTime updatedAt;
}
public enum OrderStatus {
PENDING, PAID, SHIPPED, DELIVERED, CANCELLED, REFUNDED
}
// Step 2: Copilot补全Mapper和Service
// 写完Entity后,Copilot会自动建议Mapper和Service代码
// 按Tab接受,稍作修改即可
// Step 3: 用AI生成Controller
// 选中Entity和Service → 右键 → Copilot → Generate REST Controller
// 自动生成增删改查接口
我的提示词模板
# CRUD生成提示词(存为模板,重复使用)
请基于以下信息生成完整的REST API代码:
实体类:[粘贴Entity]
要求:
1. Controller包含CRUD接口,RESTful风格
2. Service层包含业务逻辑
3. 使用Spring Boot 3.x + Java 21
4. 统一返回ResponseEntity<Result<T>>
5. 参数校验使用@Valid
6. 异常处理使用@ExceptionHandler
7. 分页查询使用Pageable
输出:Controller + Service + ServiceImpl + DTO
场景二:自动生成单元测试(省22分钟/个)
传统方式
手动写测试用例:30分钟
→ 想测试场景
→ 构造mock数据
→ 写断言
→ 补充边界情况
AI辅助方式
// 选中要测试的方法 → 右键 → Copilot → Generate Tests
// AI生成的测试用例:
@SpringBootTest
class OrderServiceTest {
@Mock
private OrderMapper orderMapper;
@Mock
private UserService userService;
@InjectMocks
private OrderService orderService;
@Test
@DisplayName("创建订单 - 正常流程")
void createOrder_success() {
// Given
OrderRequest request = OrderRequest.builder()
.userId(1L)
.productName("Java编程思想")
.quantity(1)
.amount(new BigDecimal("99.00"))
.build();
User mockUser = new User(1L, "卷毛", UserLevel.VIP);
when(userService.findById(1L)).thenReturn(mockUser);
when(orderMapper.insert(any(Order.class))).thenReturn(1);
// When
OrderResult result = orderService.createOrder(request);
// Then
assertNotNull(result);
assertEquals(OrderStatus.PENDING, result.getStatus());
assertEquals("VIP折扣已应用", result.getDiscountDesc());
verify(orderMapper, times(1)).insert(any(Order.class));
}
@Test
@DisplayName("创建订单 - 用户不存在")
void createOrder_userNotFound() {
when(userService.findById(999L)).thenReturn(null);
assertThrows(UserNotFoundException.class, () -> {
orderService.createOrder(OrderRequest.builder()
.userId(999L)
.productName("test")
.quantity(1)
.amount(BigDecimal.ONE)
.build());
});
}
@Test
@DisplayName("创建订单 - 数量为0")
void createOrder_zeroQuantity() {
OrderRequest request = OrderRequest.builder()
.userId(1L)
.quantity(0) // 边界值
.amount(BigDecimal.ZERO)
.build();
assertThrows(InvalidOrderException.class, () -> {
orderService.createOrder(request);
});
}
@Test
@DisplayName("创建订单 - VIP用户享受额外折扣")
void createOrder_vipDiscount() {
// 测试VIP专属逻辑
}
}
AI生成测试的改进技巧
# 提示词模板
请为以下方法生成JUnit5单元测试:
[粘贴方法代码]
要求:
1. 使用Mockito进行依赖Mock
2. 覆盖以下场景:
- 正常流程
- 空值/null场景
- 边界值(0、负数、最大值)
- 异常场景
3. 使用@DisplayName描述每个测试
4. 使用Given-When-Then结构
5. 断言要具体,不要只断言notNull
场景三:快速调试和排查Bug(省45分钟/个)
传统方式
1. 看报错信息 → 不懂
2. 搜Stack Overflow → 找到类似的但不完全一样
3. 加断点调试 → 逐行跟踪
4. 查日志 → 日志不够详细
5. 请教同事 → 等他有空
总计:90分钟
AI辅助方式
// Step 1: 把报错信息丢给AI
// 提示词:
// "我的Spring Boot应用启动报错,以下是完整错误日志。
// 请分析原因并给出解决方案。
// [粘贴错误日志]"
// AI分析示例:
// 报错:java.lang.IllegalStateException: Failed to load ApplicationContext
// 原因:Bean循环依赖
// A → B → C → A
//
// AI回答:
// "这是一个循环依赖问题。Bean A注入B,B注入C,C又注入A。
// 解决方案:
// 1. 使用@Lazy注解延迟加载
// 2. 重构代码,提取公共逻辑到第四个Bean
// 3. 使用ApplicationContextAware手动获取
// 4. Spring Boot 2.6+在application.yml设置spring.main.allow-circular-references=true(不推荐)"
// Step 2: 让AI帮你加调试日志
// 提示词:
// "这段代码在并发环境下偶尔返回错误结果,帮我加调试日志定位问题。
// [粘贴代码]"
// AI会帮你加上关键节点的日志:
public Order processOrder(Long orderId) {
log.debug("[processOrder开始] orderId={}", orderId);
Order order = orderDao.findById(orderId);
log.debug("[查询订单] order={}, status={}", order, order.getStatus());
if (order.getStatus() != OrderStatus.PENDING) {
log.warn("[状态异常] 期望PENDING,实际={}", order.getStatus());
throw new IllegalStateException("订单状态不允许操作");
}
// ... 处理逻辑
log.debug("[processOrder结束] orderId={}, result={}", orderId, result);
return result;
}
// Step 3: 让AI分析性能瓶颈
// 提示词:
// "这个接口响应时间从200ms涨到2000ms,以下是代码和链路追踪截图。
// 请分析可能的性能瓶颈。
// [粘贴代码] [粘贴追踪信息]"
// AI会指出:
// 1. 第45行有N+1查询问题
// 2. 第67行在循环里调用RPC
// 3. 第89行有重复计算
// 并给出优化建议
场景四:自动生成技术文档(省45分钟/次)
传统方式
手写API文档:60分钟
→ 整理接口列表
→ 写请求/响应格式
→ 写示例
→ 写错误码
→ 维护更新
AI辅助方式
// Step 1: 用AI生成Swagger注解
// 选中Controller → 右键 → Copilot → Generate Documentation
// AI自动添加:
@RestController
@RequestMapping("/api/orders")
@Tag(name = "订单管理", description = "订单相关接口")
public class OrderController {
@PostMapping
@Operation(
summary = "创建订单",
description = "根据商品信息和用户ID创建订单,返回订单详情。VIP用户享受额外折扣。"
)
@ApiResponses({
@ApiResponse(responseCode = "201", description = "创建成功"),
@ApiResponse(responseCode = "400", description = "参数校验失败"),
@ApiResponse(responseCode = "404", description = "用户不存在"),
@ApiResponse(responseCode = "409", description = "库存不足")
})
public ResponseEntity<Result<OrderVO>> createOrder(
@Valid @RequestBody @Parameter(description = "订单创建请求") OrderCreateRequest request,
@RequestHeader("X-User-Id") Long userId
) {
OrderVO order = orderService.create(request, userId);
return ResponseEntity.status(HttpStatus.CREATED)
.body(Result.success(order));
}
}
// Step 2: 让AI生成接口文档
// 提示词:
// "基于以下Controller代码,生成Markdown格式的API文档。
// 包含:接口说明、请求参数表格、响应格式、错误码、示例。
// [粘贴Controller代码]"
// Step 3: 让AI生成变更日志
// 提示词:
// "对比以下两个版本的代码差异,生成变更日志。
// 版本1:[旧代码]
// 版本2:[新代码]"
// AI输出:
// ## v2.0.0 变更日志
// ### 新增
// - 订单创建接口支持VIP折扣
// - 新增库存预扣机制
// ### 修改
// - 订单状态枚举增加REFUNDED
// - 分页查询默认 pageSize 从20改为50
// ### 废弃
// - 旧版批量查询接口标记为@Deprecated
场景五:代码重构(省30分钟/次)
// 选中要重构的代码 → 右键 → Copilot → Refactor
// 重构前:100行的processOrder方法
public void processOrder(Order order) {
// 一大坨if-else逻辑...
// 混合了校验、业务处理、通知、日志...
}
// AI重构后:拆分成职责清晰的方法
public OrderResult processOrder(Order order) {
validateOrder(order);
OrderResult result = executeOrder(order);
notifyOrderProcessed(result);
return result;
}
private void validateOrder(Order order) {
if (order == null) throw new IllegalArgumentException("订单不能为空");
if (order.getAmount().compareTo(BigDecimal.ZERO) <= 0)
throw new InvalidOrderException("金额必须大于0");
if (!isValidStatus(order.getStatus()))
throw new InvalidOrderException("状态不合法");
}
private OrderResult executeOrder(Order order) {
// 核心业务逻辑
}
private void notifyOrderProcessed(OrderResult result) {
// 通知逻辑
}
AI编程助手的正确使用姿势
该让AI做的事
✅ 重复性代码(CRUD、DTO、Converter)
✅ 单元测试(生成测试骨架和用例)
✅ 代码注释和文档
✅ 代码格式化和import优化
✅ 简单Bug分析
✅ 正则表达式
✅ SQL编写
✅ 配置文件生成
不该让AI做的事
❌ 核心业务逻辑设计(AI不了解你的业务)
❌ 安全相关代码(加密、认证、授权——必须人工审查)
❌ 性能关键路径(AI生成的代码可能有效率问题)
❌ 架构决策(AI给的建议可能不适合你的场景)
❌ 不加审查直接使用(AI会犯错,必须review)
高效使用原则
1. 给上下文,不要只给代码
❌ "这段代码有什么问题?"
✅ "这是一个订单处理方法,在高并发下偶尔超卖。
代码如下,请分析原因并给出修复方案。"
2. 分步骤提问,不要一次要求太多
❌ "帮我写一个完整的电商系统"
✅ "先帮我设计订单创建流程的接口定义"
3. 要求AI解释,不要盲目接受
✅ "为什么你建议用ReentrantLock而不是synchronized?"
✅ "这个方案有什么缺点?"
4. 建立自己的提示词库
✅ 把好用的提示词存起来,重复使用
✅ 团队共享提示词模板
我的AI编程日常时间线
08:30-09:00 晨会 + 看邮件
09:00-09:30 用AI生成今天要开发的3个接口代码骨架
09:30-11:00 核心业务逻辑编码(AI辅助补全,自己把控设计)
11:00-11:30 用AI生成单元测试,人工review补充边界场景
11:30-12:00 Code Review(AI预审 + 人工确认)
14:00-15:00 修Bug(AI分析报错 + 自己定位根因)
15:00-16:00 重构老代码(AI建议 + 自己决策)
16:00-16:30 写技术文档(AI生成初稿 + 自己润色)
16:30-17:30 开会 + 沟通协作
17:30-18:00 提交代码 + 明日规划
以前:9小时工作日,3小时加班
现在:8小时工作日,准时下班
省下的2小时:
→ 30分钟:学习新技术
→ 30分钟:写公众号文章
→ 1小时:陪家人 / 健身 / 休息
写在最后
AI编程助手不是在取代程序员,而是在淘汰不用AI的程序员。
会用AI的程序员:
→ 把重复劳动交给AI
→ 把省下的时间用在架构设计、业务理解、技术深度上
→ 产出质量更高,加班更少
不会用AI的程序员:
→ 还在手写CRUD
→ 还在手动写测试
→ 还在逐行Debug
→ 效率越来越落后
工具在那里,用不用是你的选择。
📌 我是卷毛,9年Java开发,每天用AI省2小时,把时间花在更有价值的事情上。
这篇如果对你有帮助,收藏+关注,随时翻出来参考。
关注《卷毛的技术笔记》,后续分享更多AI辅助开发的实战经验! 🔥
你在用AI编程助手吗?有什么好用的技巧?评论区分享 👇
更多推荐




所有评论(0)