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

news2024/9/21 2:42:08

文章目录

  • 前言
    • 支持的编程语言 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");//中转站站点id
						stationLine.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"); // 中转站站点id
        stationLine.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"><i
                                            class="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"><i
                                                class="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"><i
                                                class="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.coloradmin.cn/o/2073089.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《黑神话:悟空》爆火,作为普通人,该怎么抓住这波风口赚到钱?

目录 一、游戏视频 1.1、游戏教程视频 1.2、游戏剧情视频 二、游戏直播 三、游戏视频出海 四、AI黑神话悟空 大家好&#xff0c;我是小奇&#xff0c;一名热衷于分享AI副业项目的普通博主。不管你是AI小白还是老手&#xff0c;我都能帮你轻松上手&#xff0c;用AI技术赚钱…

【C++ Primer Plus习题】4.7

问题: 解答: #include <iostream> #include <string> using namespace std;typedef struct _Pizza {string companyName;float diameter;float wieght; }Pizza;int main() {Pizza p;cout << "请输入披萨的公司名: ";getline(cin, p.companyName);…

uniapp+vue3的ifdef实现多端配置客服消息

在微信小程序预览&#xff0c;实现客服消息&#xff0c;因是个人版&#xff0c;不支持 button | uni-app官网 (dcloud.net.cn) 条件编译处理多端差异 | uni-app官网 (dcloud.net.cn) uni.makePhoneCall(OBJECT) | uni-app官网 (dcloud.net.cn) //my.vue <template> &l…

10大国产AI绘画软件,每一款都挺好用 ,你用过吗?

在这个科技与艺术交织的时代,AI绘画软件正以惊人的速度改变着我们的创作方式。今天,就让我们一起探索那些你绝不能错过的10大国产AI绘画神器,它们不仅让创作变得前所未有的简单高效,更让每一位艺术家和爱好者都能享受到创作的无限乐趣! 1️⃣触站A🎨——语音创作,未…

循环结构程序设计-找出指定数量学生的最高分

**7-1-1 #include <stdio.h>int main(){int n,score,max;scanf("%d",&n);max 0;for(int i0;i<n;i){scanf("%d",&score);if(score>max){max score;}}printf("%d",max);return 0; }

一文迅速上手 ESP32 bluedroid 蓝牙从机开发

前言 个人邮箱&#xff1a;zhangyixu02gmail.com该博客主要针对希望迅速上手 ESP32 蓝牙从机开发人员&#xff0c;因此&#xff0c;很多蓝牙技术细节知识并不会进行介绍&#xff0c;仅仅介绍我认为需要了解的 API 函数和回调内容。本文主要是基于gatt_server demo来微调进行进…

# ‘telnet‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

‘telnet’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 一、报错描述&#xff1a; 1、当使用 telnet 命令&#xff0c;连接本地 tomcat 的 8005 端口时报错。 2、报错解释 这个错误表明系统无法识别telnet命令&#xff0c;因为它不是内置命令&#xff0c;也没有…

跳马(华为od机考题)

一、题目 1.原题 马是象棋(包括中国象棋和国际象棋)中的棋子&#xff0c; 走法是每步直一格再斜一格&#xff0c; 即先横着或直着走一格&#xff0c;然后再斜着走一个对角线&#xff0c; 可进可退&#xff0c;可越过河界&#xff0c;俗称“马走‘日’字。 给顶m行n列的棋盘&…

人工智能在专业领域的斗争

介绍 ChatGPT 等大型语言模型 (LLM) 在用自然语言讨论一般话题的能力方面令人印象深刻。然而&#xff0c;他们在医学、金融和法律等专业领域却举步维艰。这是由于缺乏真正的理解&#xff0c;并且注重模仿而不是智力。 大语言模型正处于炒作的顶峰。由于能够用自然语言回答和讨…

“Docker中部署Kibana:步骤与指南“

博主这篇文章是跟Elasticsearch那篇文章是有关系的&#xff0c;建议大家先去看&#xff1a; 轻松上手&#xff1a;Docker部署Elasticsearch&#xff0c;高效构建搜索引擎环境_docker 启动 es-CSDN博客 这篇博文&#xff0c;还有镜像下载不下来的情况&#xff0c;大家可以去看…

攻破:重定向 缓冲区

文章目录 前言&#xff1a;认识读文件read认识重定向&&缓冲区重定向现象及分析&#xff1a;dup2的介绍&#xff1a; 缓冲区的引入&#xff1a;缓冲区的理解&#xff1a; 前言&#xff1a; ​ 从上一章开始&#xff0c;我们进入了文件IO的学习&#xff0c;认识了文件描…

浅谈C# RabbitMQ

一、基本介绍 RabbitMQ——Rabbit Message Queue的简写&#xff0c;但不能仅仅理解其为消息队列&#xff0c;消息代理更合适。 RabbitMQ 是一个由 Erlang 语言开发的AMQP&#xff08;高级消息队列协议&#xff09;的开源实现&#xff0c;其内部结构如下&#xff1a; RabbitMQ作…

今年秋招太吓人了。(20届,在得物做Java开发)

有个学弟来问我诉苦最近好忙好累&#xff0c;说竞争压力特别大&#xff0c;让我给点建议&#xff0c;要不要放弃实习闷头搞秋招&#xff0c;我才意识到时间太快了&#xff0c;想想我都毕业几年了&#xff0c;感慨颇深&#xff0c;整理一下我的求职经验和目前的心得吧&#xff0…

SpingBoot集成kafka-发送读取消息示例

SpingBoot集成kafka开发 kafka的几个常见概念 1、springboot和kafka对应版本&#xff08;重要&#xff09;2、创建springboot项目&#xff0c;引入kafka依赖2.1、生产者EventProducer2.2、消费者EventConsumer2.3、启动生产者的方法SpringBoot01KafkaBaseApplication2.4、appli…

监控电脑屏幕的软件叫什么?6款电脑屏幕监控软件分享!

监控电脑屏幕的软件可以帮助企业和家长监控电脑的使用情况&#xff0c;确保工作和学习的效率与安全。 以下是六款常用的电脑屏幕监控软件及其特点&#xff1a; 1. Keylogger 特点&#xff1a;专注于企业数据安全和员工上网行为管理。 功能&#xff1a;全面的屏幕监控、上网…

Redis持久化(RDB、AOF、混合持久化)

目录 1、持久化机制 &#xff08;1&#xff09;RDB &#xff08;2&#xff09;AOF 2、混合持久化 3、总结 ❓为什么需要持久化&#xff1f; Redis 是一个基于内存的键值存储系统&#xff0c;它提供了非常快的数据访问速度&#xff0c;因为它不需要像传统的磁盘存储那样进…

竞猜足球核心算法源码

需要实现的功能如下&#xff1a; 仅用于学习 竞猜足球核心算法源码 package com.lotterysource.portsadmin.service; import com.aliyun.oss.common.utils.DateUtil; import com.fasterxml.jackson.core.type.TypeReference; import com.lotterysource.portsadmin.dbprovid…

进存销系统

摘 要 伴随着我国全面推动信息化的趋势&#xff0c;我国的很多行业都在朝着互联网的方向进发。商品销售行业也有很多挑战。这次论文介绍的进存销系统就是为了能够解决当前传统商品进存销存在的问题&#xff0c;使得商品进存销能够更加有效率。电商智能化管理必不可少的帮手有进…

功能安全实战系列02-RamTst(RamTest)开发介绍

本文框架 前言1. What(RamTst相关概念)1.1 后台检测1.2 前台检测1.3 RamTst对应状态机2.How?2.1 接口调用2.2 配置开发2.3 测试模式选择前言 在本系列笔者将结合工作中对功能安全实战部分的开发经验进一步介绍常用,包括Memory(Flash,Ram)失效检测,程序运行时序时间检测,及…

数字模拟IC设计前端、后端、前仿、后仿新版虚拟机

虚拟化平台&#xff1a;VMware Workstation 15 Pro以上版本 操作系统&#xff1a;CentOS Linux release 7.9.2009 (Core) 一、射频模拟IC设计必备软件 Cadence IC06.18.350/IC23.10.080&#xff08;virtuoso&#xff09; Cadence SPECTRE23.10.538-isr10 Cadence ASSURA04.…