从2020年开始写Java,算到现在五年多了。中间做了不少项目——Spring Boot单体、Spring Cloud微服务、各种中间件都折腾过。但说实话,有一件事一直让我很不舒服:大部分时间并没有在"写代码",而是在做重复劳动

写一个CRUD模块,Entity、DTO、VO、Mapper、Service、Controller一层层往下撸,每层都是样板代码。改一个字段,五个文件跟着改。写单元测试比写业务代码还烦。

去年开始用Cursor,一开始也是抱着"试试看"的心态。用了一周之后,我把我日常开发的IDEA设成了只读模式——不是Cursor完全替代了IDEA,而是真正写代码这件事,Cursor确实快太多了

一、Cursor和IDEA到底什么关系?

先说个很多人关心的问题:用Cursor是不是就要放弃IDEA? 不是。我现在的做法是两个并存:

IntelliJ IDEA Cursor
什么时候用 改老项目的配置、看复杂的依赖关系、调试疑难Bug 写新功能、重构代码、写测试、日常开发
Java支持 原生顶级,毕竟是JetBrains亲儿子 VS Code生态 + LSP,够用,但没有IDEA那么细
AI能力 AI Assistant,说实话用起来一般 Claude 4 / GPT-5 随便切,多模型配合用
我的使用频率 20% 80%

本质上,Cursor是基于VS Code做的AI-First编辑器。如果你用过VS Code写Java,切换过来几乎零成本。如果你一直是IDEA重度用户,我建议先两个并存着,用Cursor写新东西,用IDEA做重量级的分析和调试。

二、安装和Java环境配置

2.1 安装

cursor.com 下载就行,Windows、macOS、Linux都支持。

2.2 Java扩展

装完Cursor之后,Java开发体验好不好,全看扩展装得全不全。这些是我装的:

  • Extension Pack for Java — Microsoft官方的,必装
  • Spring Boot Extension Pack — 做Spring Boot项目必备
  • Lombok Annotations Support — 写POJO不能没有Lombok
  • MyBatisX — Mapper接口和XML之间来回跳
  • Maven for Java — 依赖管理和项目构建

装完之后,Cursor的Java开发体验基本和VS Code持平,再叠加上AI能力,体验就完全不一样了。

2.3 关于Pro版

新用户有14天Pro免费试用。我建议一定要用Pro版来体验,因为免费版的AI模型比较弱,补全和对话质量差距明显。

Pro版 $20/月,核心就是能用 Claude 4 Sonnet/Opus、GPT-5 这些强模型。如果你每天写代码超过2小时,这个钱基本一个月就能从省下来的时间里面赚回来。

三、Cursor的三个核心能力

我用Cursor大概有这三个高频操作,按使用频率排序:

3.1 Tab补全 — 用得最频繁

这个不是普通的代码补全。普通的补全是根据当前行预测下一行,Cursor的Tab补全是基于整个项目上下文的。它知道你的项目结构、你用了哪些依赖、你的编码风格是什么样的。

举个例子,我在写一个用户管理的Controller:

@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {

    private final UserService userService;

写到这里,我按了一下Tab,Cursor直接把剩下的CRUD接口全部补出来了:

    @GetMapping
    public Result<List<UserVO>> listUsers() {
        return Result.success(userService.listUsers());
    }

    @GetMapping("/{id}")
    public Result<UserVO> getUser(@PathVariable Long id) {
        return Result.success(userService.getUser(id));
    }

    @PostMapping
    public Result<Long> createUser(@RequestBody @Valid UserCreateDTO dto) {
        return Result.success(userService.createUser(dto));
    }

    @PutMapping("/{id}")
    public Result<Void> updateUser(@PathVariable Long id,
                                    @RequestBody @Valid UserUpdateDTO dto) {
        userService.updateUser(id, dto);
        return Result.success();
    }

    @DeleteMapping("/{id}")
    public Result<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return Result.success();
    }
}

返回类型用的 Result<T>、入参用的 @Valid、命名风格用的是 XxxVOXxxDTO——这些都是因为我项目里已有的代码风格,Cursor学到了。

之前手写这些接口,光查注解和调返回类型就得3-5分钟,现在5秒钟搞定。一个Tab,省掉了我3分钟。

3.2 Chat面板 — 代码理解+生成

Ctrl+L 打开Chat。这个面板最大的亮点是可以用 @ 引用项目里的任何东西:

  • @UserService.java — 引用单个文件
  • @src/main/java/com/example/service/ — 引用整个包
  • @docs/ — 引用文档目录
  • @web — 联网搜索最新资料

我日常用得最多的场景:写MyBatis的复杂查询。

比如我需要写一个多条件分页查询,涉及模糊搜索、状态筛选、时间范围、关联查询。以前我得翻半天MyBatis文档,现在直接在Chat里说:
在这里插入图片描述
Cursor会直接生成Mapper接口方法 + 对应的XML SQL,格式和我项目里已有的XML保持一致。

3.3 Composer / Agent模式 — 多文件联动修改

Ctrl+I 打开Composer面板。这是Cursor最有意思的功能——它不只是给你建议,而是直接帮你改代码,而且可以同时改多个文件。

我上个月用它做了一次大重构:一个写了两年多的 OrderService,里面堆了大量的 if-else 支付类型判断,200多行一个方法。我在Composer里输入:
在这里插入图片描述
Cursor一口气改了6个文件——新建了 OrderValidatorPaymentStrategy 接口和三个实现类,重构了 OrderService,还生成了 OrderServiceTest。所有改动都在左侧用diff预览展示,我一个一个看过去,accept或者reject。

这活儿放在以前,我估计得花一整个下午。用Cursor大概15分钟。

四、我用Cursor最多的6个场景

场景1:从建表SQL到全套代码

这是我觉得最省时间的用法。

项目初期设计好数据库,把建表SQL写好存成 schema.sql,然后在Chat里:
在这里插入图片描述
上次我一张表有12个字段,从Entity到VO到Converter,手动写得折腾半小时。用Cursor,30秒。20张表的代码量,一杯咖啡还没凉就全生成了。

场景2:写Spring Boot配置类

Redis配置、线程池配置、跨域配置……这些配置类结构都差不多,但每次写还是要查半天配置项名和属性。
在这里插入图片描述
生成的代码直接能用,不用再去Spring Data Redis文档里翻来翻去。

场景3:写单元测试

说实话我以前很少写单元测试,不是因为不想写,而是太烦了——Mock依赖、构造测试数据、写断言,写一个测试方法的时间够写两个业务方法了。

用了Cursor之后,我给自己立了个规矩:每个Service方法至少写两个测试用例。让Cursor生成就行:
在这里插入图片描述
生成之后跑一遍,通过的留下,失败的调一调。以前一个月写不了几个测试,现在每个Service都能覆盖到

场景4:排查线上Bug

线上出Bug的时候,我现在的习惯是:先别急着打断点,让Cursor看一遍
在这里插入图片描述
Cursor帮我找出来过好几次问题:竞态条件、资源泄漏、缓存穿透。省了我不少排查时间。

场景5:接手别人的项目

接手老项目最痛苦的就是看代码。几千行Service,嵌套的if-else,变量名不知所云。
在这里插入图片描述
Cursor会给你一份结构化的分析,比你自己硬啃代码快得多。

场景6:生成接口文档

每次写完接口都要写文档,以前是手动整理,现在一句话搞定:
在这里插入图片描述

五、.cursorrules — 这个文件决定你的体验上限

这是我觉得90%的Cursor用户都没用好的功能

.cursorrules 是放在项目根目录的配置文件,告诉Cursor你的项目规范。配好之后,Cursor生成的代码会自动符合你的团队规范,省掉大量后置调整

我的 .cursorrules 长这样:

## 技术栈
- Java 17, Spring Boot 3.2, MyBatis-Plus
- MySQL 8.0, Redis 7, RabbitMQ
- 使用Lombok简化代码

## 编码规范
- Controller只做参数校验和结果包装
- Service必须有接口和实现类分离
- 所有public方法必须有Javadoc
- 异常统一用GlobalExceptionHandler处理
- 返回统一用Result<T>包装
- 分页用PageResult<T>

## 命名规范
- Entity: User, Order(无后缀)
- DTO: UserCreateDTO, UserQueryDTO
- VO: UserVO, OrderDetailVO
- Mapper: UserMapper
- Service接口: UserService
- Service实现: UserServiceImpl

## 数据库规范
- 表名用下划线:t_user, t_order
- 必须有字段:id(bigint自增), create_time, update_time, is_deleted
- 逻辑删除用is_deleted字段

## Git规范
- commit格式:type(scope): description
- type可选:feat/fix/refactor/docs/test/chore

配和不配的差距非常大。不配的话,Cursor生成的是"通用的Java代码",接口返回可能用 ResponseEntity 而不是你的 Result<T>,命名可能是 UserResponse 而不是你的 UserVO。配了之后,它就是你的专属编码搭档。

六、几个踩坑记录

用了几个月,遇到过一些坑,记录一下避免大家踩:

坑1:Tab补全不看上下文就乱补

有时候你只是想打个注释,它非要给你补一坨代码。

→ 解决:按 Esc 取消就行。或者在设置里调高Tab补全的阈值。

坑2:大项目索引特别慢

我的一个微服务项目有两百多个文件,打开Cursor之后索引了好几分钟。

→ 解决:在项目根目录建一个 .cursorignore,排除不需要索引的目录:

target/
node_modules/
*.log
.git/

坑3:生成的代码缺import

尤其用Chat生成的时候,有时候会忘了加import语句。

→ 解决:在 .cursorrules 里写上你常用的依赖包名,或者在提示词里加一句"包含所有必要的import"。

坑4:Composer改动太多,review不过来

有时候Agent一口气改了十几个文件,diff看不过来。

→ 解决:缩小任务范围。不要一次让它"重构整个项目",拆成小的任务,比如"先重构UserService的createOrder方法"。

七、我的使用建议

最后分享一下我的实际使用节奏:

日常开发:主力用Cursor,Tab补全 + Chat为主。80%的编码工作在这个流程里完成。

接手老项目/复杂调试:切到IDEA,用它的依赖分析、Debug能力。

代码Review:Cursor的 @git diff 功能配合Chat,比自己一行行看快很多。

学习新技术:直接在Chat里问,@web 联网搜索 + 代码演示,比看文档效率高。

最后说一句实话:Cursor确实能大幅提升编码效率,但它生成的东西你要能看懂、能判断对不对。工具帮你省时间,但不能替你思考。 把省下来的时间用在架构设计、技术选型这些真正需要脑力的事情上,才是正解。

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐