文心快码助力项目实战开发

2024-08-25 16:20

本文主要是介绍文心快码助力项目实战开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 前言
    • 支持的编程语言 Language
    • 安装方法
    • 使用方法
  • 项目实践
    • 代码运行流程
    • 出行方案查询
    • JSP 指令与标签库指令
    • 页面上下文路径设置
    • 表单部分
    • 查询结果显示部分
  • 使用感受
    • 优点
    • 改进建议


前言

提示:这里可以添加本文要记录的大概内容:

文心快码Baidu Comate这个插件其实早在2023年10月份就推出了,经过了多次更新迭代,现在来到了v2.10.0版本,相对于上次主要🌈 提升对话以及续写的速度。是一款主要帮助开发者提高工作效率的工具!

下面是我个人基于在个人免费版中的体验,仅供参考,欢迎批评指正!

支持的编程语言 Language

当前 Baidu Comate 支持的语言/框架如下:

Baidu Comate support following languages:

后端(BackEnd): C、C++、Java、Python、Go、PHP、Rust
前端(FrontEnd): HTML、JavaScript、CSS、Less、swan、San、Vue、Scss、Sass、Stylus、pug、mermaid
App端(APP): ObjectC、Kotlin、Swift
其它(Others): Perl、Ruby、Shell、vhdl、GraphQL、Dockerfile

安装方法

IDEA中安装 文心快码(Baidu Comate),在打开IDEA后打开设置→插件→搜索

重启 IDEA,重启成功后登录百度账号,现在就可以开始使用智能编码的功能了。
在这里插入图片描述

使用方法

打开项目文件后,然后Baidu Comate智能编码助手插件在右侧,可以在下面输入
在这里插入图片描述

也可以在代码中选中代码右侧
在这里插入图片描述

项目实践

这里我以曾经做过的一个项目为例,测试一下Baidu Comate可不可以让我的项目在代码实现上更上一层楼

下图是这个项目的功能结构:
在这里插入图片描述
这里以前台按照查询条件分页查询公交车次信息功能为例,看下Baidu Comate对这个功能的看法

代码运行流程

通过下面动图可以看到Baidu Comate生成的内容对于不熟悉这个项目的人来说是很友好的
请添加图片描述

它解释了一个Java控制器方法的功能。该方法是基于Spring MVC框架的,用于处理HTTP请求来查询公交乘车方案。具体来说代码助手做了以下几件事:

  1. 首先生成了一段描述性的文字,这段文字是关于一个Java控制器方法的。说有个方法接收一个HTTP GET请求,并处理有关公交乘车方案的查询。

  2. 然后方法会根据传入的参数(如出发地、目的地等)去数据库中查找直达的公交线路,如果没有直达线路,它会继续查找换乘方案。找到合适的乘车方案后,这些方案会被组织成一个模型,并且作为数据传递给视图层。

  3. 最后,方法返回一个视图的名字,这通常意味着前端页面将展示这些查询结果。

这段描述提供了对一个具体公交线路查询功能的实现细节,从接收到请求开始,到最终返回结果给用户。

下面我继续追问:这段代码是怎么运行的?

他的回答说实话我很满意,在Spring MVC中从前端请求到后端处理再到视图渲染的全过程,包括参数绑定、业务逻辑处理和视图返回。其中的一个亮点是对换乘查询逻辑的分层处理,而且还顺便指出了一个错误!
在这里插入图片描述

接下来在检查代码后顺着他的回答后问:提到的错误怎么解决?

原来代码:

if(startStationId!=null && endStationId!=null){/*第一步:先查有没有直达方案*///去中间表中查List<Map<String, Integer>> lines=stationLineService.getLineIdBystation(startStationId,endStationId);if(lines!=null && lines.size()>0){//说明有直达的方案System.out.println("有直达方案");status=0;for(Map<String, Integer> map:lines){directBusLines.add(busLineService.getBusLine(map.get("sl_line_id")));}}else {//没有直达方案查询一次换乘的方案System.out.println("没有直达的方案");/*第二步:查询一次换乘方案*///先得到中转站点List<Map<String, Integer>> trans_ids=stationLineService.getTransStationBystation(startStationId, endStationId);if(trans_ids!=null && trans_ids.size()>0){//说明有直达的方案System.out.println("有一次换乘方案");status=1;for(Map<String, Integer> map:trans_ids){List<BusLine> oneBusLines=new ArrayList<BusLine>();List<BusLine> twoBusLines=new ArrayList<BusLine>();StationLine stationLine=new StationLine();Integer stationId=map.get("sl_station_id");//中转站站点idstationLine.setTransStation(busStationService.getBusStation(stationId));List<Map<String, Integer>> lines1=stationLineService.getLineIdBystation(startStationId,stationId);for(Map<String, Integer> map1:lines1){oneBusLines.add(busLineService.getBusLine(map1.get("sl_line_id")));stationLine.setOneBusLines(oneBusLines);}List<Map<String, Integer>> lines2=stationLineService.getLineIdBystation(stationId,endStationId);for(Map<String, Integer> map2:lines2){twoBusLines.add(busLineService.getBusLine(map2.get("sl_line_id")));stationLine.setTwoBusLines(twoBusLines);}stationLines.add(stationLine);}}}}

回答说应该确保oneBusLinestwoBusLines列表在循环内部被填充,但在循环外部才将它们的值设置到stationLine对象中。这样,每次循环迭代都会向这些列表中添加新的公交线路,而不是覆盖它们。

以下是修改后的代码片段,它修复了原来代码中指出的逻辑错误:

if (trans_ids != null && trans_ids.size() > 0) {// 说明有换乘的方案System.out.println("有一次换乘方案");status = 1;for (Map<String, Integer> map : trans_ids) {List<BusLine> oneBusLines = new ArrayList<>();List<BusLine> twoBusLines = new ArrayList<>();StationLine stationLine = new StationLine();Integer stationId = map.get("sl_station_id"); // 中转站站点idstationLine.setTransStation(busStationService.getBusStation(stationId));// 查询第一段线路List<Map<String, Integer>> lines1 = stationLineService.getLineIdBystation(startStationId, stationId);for (Map<String, Integer> map1 : lines1) {oneBusLines.add(busLineService.getBusLine(map1.get("sl_line_id")));}// 查询第二段线路List<Map<String, Integer>> lines2 = stationLineService.getLineIdBystation(stationId, endStationId);for (Map<String, Integer> map2 : lines2) {twoBusLines.add(busLineService.getBusLine(map2.get("sl_line_id")));}// 设置完整的线路到StationLine对象(现在是在内层循环的末尾)stationLine.setOneBusLines(oneBusLines);stationLine.setTwoBusLines(twoBusLines);// 将配置好的stationLine对象添加到列表中stationLines.add(stationLine);}
}

在他的解释中:oneBusLinestwoBusLines列表是在每次迭代开始时为新的StationLine对象初始化的,但它们是在内层循环完全结束后才被设置到stationLine对象中的。这样每个StationLine对象都会包含从起始站到中转站以及从中转站到目的站的所有公交线路。然后每个配置好的StationLine对象都被添加到stationLines列表中,以便在视图中使用。

代码视频

出行方案查询

将生成代码复制进程序运行:success
在这里插入图片描述
在点击查询按钮后后端会调用这个接口:
在这里插入图片描述
看到这里应该知道后端代码的执行流程了吧

接下来看下前端代码:

前端代码的主要功能包括设置页面元数据、显示表单以及根据查询结果展示不同的表格。下面是主要功能代码的摘录

JSP 指令与标签库指令

<%@ page language="java" import="java.util.*"contentType="text/html;charset=UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

你比如说我想知道这段代码有什么作用:
在这里插入图片描述
总结一下就是这段代码的作用就是为 JSP 页面提供了一个基础框架,让开发者能够轻松地使用 Java 编写动态网页内容,并利用 JSTL 标签来处理数据和逻辑,最终输出一个 HTML 页面给用户浏览。

页面上下文路径设置

在这里插入图片描述

<c:set var="ctx" value="${pageContext.request.contextPath}"/>

这行代码翻译成人话就是:

如果你想要引用一个位于 plugins/bootstrap.css 的文件,你可以这样写:

<link href="${ctx }/plugins/bootstrap.css" rel="stylesheet">

这将确保不论应用部署在哪个路径下,浏览器都能正确加载到 bootstrap.css 文件。

总的来说,这段 <c:set> 代码是为了方便在 JSP 页面中使用上下文路径,从而避免硬编码具体的路径,使得应用更加灵活和可移植。

表单部分

<form name="busLineQueryForm" id="busLineQueryForm"action="${ctx }/StationLine/frontlist" class="mar_t15"method="post"><div class="form-group"><label for="startStation_stationId">出发地站点:</label><select id="startStation_stationId" name="startStation.stationId" class="form-control"><option value="0">请选择……</option><c:forEach items="${busStationList }" var="busStationTemp" ><option value="${busStationTemp.stationId }" <c:if test="${startStation.stationId eq busStationTemp.stationId }">selected="selected"</c:if>>${busStationTemp.stationName }</option></c:forEach></select></div><div class="form-group"><label for="endStation_stationId">目的地站点:</label><select id="endStation_stationId" name="endStation.stationId" class="form-control"><option value="0">请选择……</option><c:forEach items="${busStationList }" var="busStationTemp" ><option value="${busStationTemp.stationId }" <c:if test="${endStation.stationId eq busStationTemp.stationId }">selected="selected"</c:if>>${busStationTemp.stationName }</option></c:forEach></select></div><button type="submit" class="btn btn-primary">查询</button>
</form>

表单定义:
nameid 属性: 表单的名称和 ID 分别为 busLineQueryForm
action 属性: 当表单提交时,数据会被发送到 ${ctx}/StationLine/frontlist 这个 URL。其中 ${ctx} 是之前设置的变量,代表应用的上下文路径。
method 属性: 表单的提交方式为 POST

表单项:
出发地站点选择:
<label> 标签: 显示文本 “出发地站点:”。
<select> 标签: 创建一个下拉列表,用户可以选择出发地站点。
items 属性: 使用 JSTL 的 <c:forEach> 循环遍历 ${busStationList} 列表,其中每个元素都是一个站点对象。
var 属性: 在循环中使用变量 busStationTemp 来引用当前迭代的站点对象。
<option> 标签: 为每个站点创建一个选项,其 value 为站点的 stationId,显示文本为站点的 stationName
如果 startStation.stationId 与当前站点的 stationId 相等,则添加 selected="selected" 属性,使该选项默认选中。

查询结果显示部分

<div class="tab-pane active" id="busLineListPanel"><div class="row"><div class="col-md-12 top5"><div class="table-responsive"><table class="table table-condensed table-hover"><c:if test="${status ==0 }"><tr style="background:#0e90d2;color:#fff;"> <th colspan="8">直达方案:</th></tr><tr style="font-weight: 600; font-style: italic;"><td>线路名称</td><td>起点站</td><td>终到站</td><td>首班车时间</td><td>末班车时间</td><td>所属公司</td><td>票价</td><td>操作</td></tr><c:forEach items="${directBusLines }" var="busLine" ><tr><td>${busLine.name }</td><td>${busLine.startStation.stationName }</td><td>${busLine.endStation.stationName }</td><td>${busLine.startTime}</td><td>${busLine.endTime}</td><td>${busLine.company }</td><td>${busLine.ticket }</td><td><c:if test="${not empty busLine.lineId && !(busLine.lineId eq '') }"><a href="${ctx }/BusLine/${ busLine.lineId}/frontshow"><iclass="fa fa-info"></i>&nbsp;查看</a></c:if></td></tr></c:forEach></c:if><c:if test="${status==1 }"><tr style="background:#0e90d2;color:#fff;"> <th colspan="8">一次换乘方案</th></tr><c:forEach  items="${stationLines }" var="stationLine" ><tr> <th style="font-weight: 600; border-left:5px solid #0e90d2; color: red"  colspan="7">中转前的乘车车次,中转站为:${stationLine.transStation.stationName}</th></tr><tr style="font-weight: 600; font-style: italic;"><td>线路名称</td><td>起点站</td><td>终到站</td><td>首班车时间</td><td>末班车时间</td><td>所属公司</td><td>票价</td><td>操作</td></tr><c:forEach items="${stationLine.oneBusLines }" var="busLine" ><tr><td>${busLine.name }</td><td>${busLine.startStation.stationName }</td><td>${busLine.endStation.stationName }</td><td>${busLine.startTime}</td><td>${busLine.endTime}</td><td>${busLine.company }</td><td>${busLine.ticket }</td><td><c:if test="${not empty busLine.lineId && !(busLine.lineId eq '') }"><a href="${ctx }/BusLine/${ busLine.lineId}/frontshow"><iclass="fa fa-info"></i>&nbsp;查看</a></c:if></td></tr></c:forEach><tr > <th  colspan="8" style="border-left:5px solid #0e90d2;">中转后的乘车车次</th></tr><c:forEach items="${stationLine.twoBusLines }" var="busLine" ><tr><td>${busLine.name }</td><td>${busLine.startStation.stationName }</td><td>${busLine.endStation.stationName }</td><td>${busLine.startTime}</td><td>${busLine.endTime}</td><td>${busLine.company }</td><td>${busLine.ticket }</td><td><c:if test="${not empty busLine.lineId && !(busLine.lineId eq '') }"><a href="${ctx }/BusLine/${ busLine.lineId}/frontshow"><iclass="fa fa-info"></i>&nbsp;查看</a></c:if></td></tr></c:forEach><hr style="color: red"></c:forEach></c:if><c:if test="${status==-1 }"><tr> <th>暂无方案或者换乘太多次</th></tr></c:if></table></div></div></div>
</div>

在这里插入图片描述

这些代码片段包含了表单输入的选择框(用于选择出发和到达站点),以及使用 JSTL (<c:if><c:forEach>) 标签来动态生成 HTML 表格以展示查询结果。这部分代码会根据查询结果的不同(如是否需要换乘)显示不同的表格信息,并提供了查看详细信息的链接。

使用感受

下面是我提供针对“文心快码”的直接使用感受,对于这类AI辅助编程工具,我的使用感受包括以下两个方面:

优点

效率提升: 好的AI辅助工具可以显著提高编码速度和减少重复劳动,因为它会提供改进方案,这点着实不错
在这里插入图片描述

代码质量: 如果AI能够提供高质量的代码建议或者自动生成代码,那么这将有助于提高项目的整体代码质量
在这里插入图片描述

学习支持: 对于新手开发者而言,这样的工具可以作为学习资源,帮助他们更快地掌握新技能

错误减少: AI辅助工具可以帮助识别潜在的错误和不规范的编码实践,从而减少bug的出现
请添加图片描述

用户体验: 界面友好、易于使用也是评价这类工具的重要因素之一
在这里插入图片描述

改进建议

其实Baidu Comate的各种功能我们看到已经很完美了,作为我们的日常写代码神器是绰绰有余,其中代码的一键生成自动提示。包括一键采纳都非常好用。

但是在采纳上面是可以优化一下的,比如只采纳我选中的代码到指定地方

目前的采纳一旦使用就会把全部代码都采纳了不可选择

采纳建议

这篇关于文心快码助力项目实战开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1106042

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定