Cursor助力Java开发

视频讲解



这篇文章来教大家如何使用Cursor来开发Java,开始之前先来回答一个问题:Cursor是基于VSCODE二开的,可以用来写Java吗?

答案是可以的,就我使用了一段时间来说,虽然不如IDEA那么顺手,但它的Ai功能完全掩盖其它的不足。


一、Cursor的安装


直接去官网下载: https://www.cursor.com , 交互什么的和vscode一样(毕竟是基于vscode二开的)

导入Java项目,会提示安装一些Java扩展。下面是一些基本的插件(按照提示就会安装,MybatisX看个人需求)

  1. Extension Pack for Java
  2. Debugger for Java
  3. Language Support for Java™ by Red Hat
  4. Maven for Java
  5. Project Manager for Java
  6. Test Runner for Java
  7. IntelliJ IDEA Keybindings 保证大部分快捷键和IDEA一样
  8. MybatisX 可以在Mapper的接口和XML之间跳转

默认的主题颜色可能对大部分人来说太绚丽了,有些刺眼,可以在这里选择适合自己的主题颜色

在这里插入图片描述


Cursor默认的文件结构是一层一层的,和IDEA有点区别。通过设置可以让目录结构和IDEA一样

在这里插入图片描述


可以把「JAVA PROJECTS」 拖到侧边栏,这样更符合IDEA的习惯,启动项目,就算完成了Cursor的安装了

在这里插入图片描述


注:可以用Cursor和IDEA同时打开一个项目,Cursor默认会选择好maven和jdk,如果没有的话,可以在IDEA里面按照之前的方式设置一下,Cursor也会同步修改好的


Cursor 的侧边栏有2个窗口,CHAT 和 COMPOSER,开发代码的时候直接无脑选择 COMPOSER就行

  • CHAT 就理解成一个聊天对话框,你问它答
  • COMPOSER 是一个权限很大的CHAT,比如你让它写一个代码,它可以直接生成文件写好代码,对于它生成的代码,可以选择接受或拒绝

COMPOSER 还有 normal/agent 模式,agent 可以执行命令,比如你告诉它「提交代码」,它就可以 卡卡执行 git add . git commit 等,权限很大,用的时候要谨慎
在这里插入图片描述


开发


不要把Ai当成一个傻子,更不要把它当成上帝,而是把它当作一个人。当你和别人沟通的时候,你要说出背景和问题,有了清晰的背景和清晰的问题,别人才可以很好的给你答案。

对于写代码来说,背景就是「整个代码库」,问题就是指令,比如「为xx接口,新增一个xx字段的>查询条件」


Cursor的强大在于它可以很好的理解代码库,当你在 在 Composer 里面 @Codebase 它就理解了整个代码库,是真的理解了,不再是之前IDEA里面的插件一样含糊其词的理解。既如此那么在使用Cursor只剩下一个问题了:「描述问题,下达指令」


对于后端的代码,无非就是各种增删改查,我们要做的就是任务拆分,拆分成一个个可执行的小指令,发给Cursor让它去写代码。

千万不要觉得你的需求特殊,你的需求很复杂,再高的楼也是一砖一瓦堆砌起来的,复杂的需求最多就是涉及到的接口多,仅此而已,它只是多而不是难。

案例一


产品需求:为某个列表新增两个时间查询

需求工时: 0.5天

需求分析,需要被查询的2个字段,字段A数据库是时间,字段B数据库是日期,前端产品要求传递日期范围

那么就要在Controller的Query里面新增4个日期的接受字段,传递到Service的时候字段A相关的要转成时间,同时在XML里面加上对应的查询


三次对话完成了这个需求

对话输入内容
1@Codebase @DmsPatientPackageController.java 需要对 findPatientPackageWithPage 新增 created 和 expiryDate的范围查询, created前端传递的是日期格式,数据库是时间格式,需要在 @DmsPatientPackageViewServiceImpl.java 进行转换,
2@Codebase 1、我习惯让开始叫From,结束叫To, 2、日期转成时间的时候开始要是00:00:00,结束要是 23:59:59, 3、你需要帮我完善SQL对这几个字段的处理 @PatientPackageMapper.xml
3@Codebase createdTo 改为 createdDateTo,createdFrom 改为 createdDateFrom, createdBeginTime 改为 createdFrom, createdEndTime 改为 createdTo,expiryBeginDate 改为 expiryDateFrom,expiryEndDate 改为 expiryDateTo

在第一次对话的时候,从Controller到Xml 的代码就写完了,后面的都是简单的调优了。你没看错,它就是可以这么好的理解代码库。


案例二


当然你会觉得上面这个案例很简单,但本质上每一个复杂的需求,都会被拆分成很多个小的模块,整体复杂,具体一定不复杂,我们拆好之后就可以让Cursor去写代码了。

再比如,你可以看 视频中的这个案例,整个小系统的前后端全部都是Cursor生成的。并不是每一个都需要拆分成那么明确,你只需要需求明确就好了,比如下面在生成这个系统的时候我的一些对话。

需求描述
排行榜接口@Codebase @OrderController.java 在订单里面加一个排行榜接口。在 @OrderViewServiceImpl.java 的实现中,先获取非【终止】,近一年的全部订单,再从订单里面找出前5名的菜单,返回的字段:菜单id、菜单名称、点击次数
让它帮我格式化数据@Codebase 在fm_menu里面加了一个字段side_dish,格式是[{"sideDishId": 5, "quantity": 1}, {"sideDishId": 2, "quantity": 0.2}],sideDishId是@SideDish.java里面的id,帮我完成这个字段的添加,且在@MenuBO.java和@MenuVO.java里面返回一个字段,List<String> sideDishs,里面是拼接好的结果,比如sideDishId=5的name是菜苔,结果就是菜苔 1把。

核心逻辑就是对话,讲清楚你的需求,如果它生成的不对,再反馈给它改就好了。其实这并不复杂,只要尝试用它做几个简单的小需求就找到感觉了。


建议

  1. 虽然可以直接用Cursor全部的开发,但体验不是很好,最重要的是当它改了代码,删除的是红色,新增的是绿色,在check代码的时候很难受。我现在都是用Cursor写代码,然后IDEA来check代码。同时打开一个项目切换一下并不麻烦,在IDEA里面看到的都是修改后的代码,check起来一目了然
  2. Ai是会犯错的,check代码很重要,当写完一个小的功能建议提交代码,不然写的多了后面想要会滚什么的相当麻烦
  3. 最最最最重要的就是先下载尝试
以下是一个包含调用Java后端接口的登录页面的全面完善的代码,包括前端HTML、CSS和JavaScript代码,以及后端Java代码。 HTML代码: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>Login</h1> <form id="login-form"> <div> <label for="username">Username:</label> <input type="text" id="username" name="username" required> </div> <div> <label for="password">Password:</label> <input type="password" id="password" name="password" required> </div> <div> <button type="submit" id="login-btn">Login</button> </div> </form> </div> <script src="script.js"></script> </body> </html> ``` CSS代码: ```css body { font-family: Arial, Helvetica, sans-serif; background-color: #f4f4f4; } .container { width: 500px; margin: 50px auto; background-color: #fff; border-radius: 10px; padding: 20px; } h1 { text-align: center; } form { display: flex; flex-direction: column; align-items: center; } label { margin-right: 10px; } input[type="text"], input[type="password"], button[type="submit"] { width: 100%; margin-bottom: 10px; padding: 10px; border-radius: 5px; border: none; } button[type="submit"] { background-color: #4CAF50; color: #fff; cursor: pointer; } button[type="submit"]:hover { background-color: #3e8e41; } ``` JavaScript代码: ```javascript const loginForm = document.getElementById('login-form'); const loginBtn = document.getElementById('login-btn'); loginForm.addEventListener('submit', (e) => { e.preventDefault(); const username = document.getElementById('username').value; const password = document.getElementById('password').value; fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username, password }) }) .then(response => response.json()) .then(data => { if (data.success) { window.location.href = '/dashboard'; } else { alert(data.message); } }) .catch(error => { console.error(error); alert('An error occurred. Please try again later.'); }); }); ``` Java代码: ```java public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); if (isValidUser(username, password)) { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write("{\"success\": true}"); } else { response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); response.getWriter().write("{\"success\": false, \"message\": \"Invalid username or password.\"}"); } } private boolean isValidUser(String username, String password) { // TODO: check username and password against database or other authentication mechanism return true; } } ``` 以上代码实现了一个简单的登录页面,包含了调用Java后端接口的功能。用户在登录页面输入用户名和密码后,前端JavaScript代码将用户名和密码发送到后端Java代码,后端Java代码根据用户名和密码验证用户身份,返回验证结果给前端JavaScript代码,前端JavaScript代码根据返回结果跳转到相应页面或显示错误信息。在实际开发中,还需要考虑到用户会话管理、密码加密、跨站请求伪造(CSRF)防护等安全问题。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值