高级Java开发工程师手把手教你用AI人工智能帮你写JAVA代码实际案例一全网唯一

news2024/11/24 0:21:11

高级Java开发工程师手把手教你用AI人工智能帮你写Java代码实际案例一

一、前言

现在AI人工智能概念炒的很火,人们到处听到的讯息是AI人工智能颠覆我们的生活,或者是代替什么岗位,但是到底AI能帮助到我们什么,能给我们生活带来什么?可能我们普通人没有能真正的感知到!笔者本身就是一个多年研发经验的JAVA工程师,笔者把实际工作过程中,运用的简单场景分解成简单的教案共享到社会中,希望能让更多的IT从业者能享受到人工智能带来的巨大福利!

二、 AI人工智能是什么

人工智能把它看成是一个巨大的无限的机器人或者是巨型的知识库,它能是模拟人类的神经大脑的一个创造的巨大的机器人,它可以通过自主学习与训练变得知识变得越来越丰富!我们普通人就帮它看成一个机器人即可!这个机器人可以协助你帮助你做一些工作、生活的事情,你要指导它、训练它让它为你所用!我们都看过施瓦辛格《未来战士》的天网,AI类似于天网的概念!你可能从脑子里想象你可以给他对话,他是你的管家!很多电影都有类似这些场景!笔者主要是从实际运用出发!就是生活中我们怎么运用到人工智能!

三、AI人工智能平台的选取“通义千问”

作者的课程主要用到AI平台是
通义千问
通义千问是阿里云研发的一款超大规模预训练语言模型,能够进行多轮对话、文案创作、逻辑推理、多模态理解及多语言支持等功能。4月7日,阿里云通义千问开源320亿参数模型Qwen1.5-32B,加上此前已经开源的5亿、18亿、40亿、70亿、140亿和720亿参数的六款大语言模型,至此凑齐阿里云的开源“葫芦娃”家族。
通义千问可应用于客户服务、在线教育、内容创作、智能搜索等诸多领域,通过与用户进行自然对话的方式提供帮助和服务。

https://tongyi.aliyun.com/qianwen/

在这里插入图片描述
在这里插入图片描述

四、实际案例场景

(一)实际需求:

实际工作需要写一个简单ETL工具,也就是将Mysql数据库读出来用jdbc插入到clickhouse数据库!

(二)与AI描述需求口令

这个相当于是代码逻辑需求讲述口令,这个口令是要了解计算机编程原理的,你要引领AI,所以你首先要有很明确的思路!

步骤思路引导1
口令1:帮我用java代码生成JDBC接口一个插入clickhouse数据库的实际代码例子

这个口令要明确说出用什么语言,用什么接口,先要一个比较范围大的概念,然后按实际生成代码调试过程,让AI帮你修改,改进,当然真正负责调整检查的也是你!AI只是干活的!

在这里插入图片描述

简单的代码生成了,你拿着代码去自己的JAVA编辑器跑跑!
并跑通了!

步骤思路引导2

然后自己根据最简单的AI编码封装一个通用的方法这个还是需要自己做的,稍微改改!

	public static int update(Connection conn, String sql, ArrayList paraList) throws Exception {
		int result = 0;
		try {
			PreparedStatement ps = null;
			ps = conn.prepareStatement(sql);
			if (paraList != null && paraList.size() > 0) {
				for (int i = 0; i < paraList.size(); i++) {
					ps.setObject(i + 1, paraList.get(i));
				}
			}
			result = ps.executeUpdate();
			if (ps != null) {
				ps.close();
			}
		} catch (Exception ex) {
			LogUtil.exceptionPrint(log, ex);
			throw new Exception(ex);
		}
		return result;
	}

然后我在跑跑代码跑通了!这个方法可以并入到我的项目的工具类里面!
但是笔者觉得这个代码,单独插入可以跑,作者还想用批处理提升一下性能,再封装一个方法!

直接将代码复制给AI,让它阅读!

在这里插入图片描述

注意:上方是代码,下方是描述,要一起发给AI,描述要准确,要不断根据实际需求修改描述,因为AI可能理解的不正确,或者它生成出来的不是你想要的!

步骤思路引导3

口令2 :这个是一个JAVA插入clickhouse JDBC的方法,我写让你帮我改进代码,用批处理实现,提升插入性能,每批5000条

在这里插入图片描述
AI回答的方法按我们的需求改进好了,我们把代码copy到自己项目的工具类跑跑!

下面是AI回答的内容:

好的,针对您的需求,这里是一个改进版的Java方法,该方法利用了ClickHouse JDBC驱动的批量处理功能来提高插入性能,每次批量插入5000条记录。请注意,ClickHouse的JDBC驱动支持批量插入,但具体的批量大小可能需要根据实际负载和系统配置进行调整。

import java.sql.BatchUpdateException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ClickhouseBatchInsertExample {

    public static int batchUpdate(Connection conn, String sql, ArrayList<Object[]> paraList) throws SQLException {
        int[] results;
        PreparedStatement ps = null;
        try {
            ps = conn.prepareStatement(sql);

            // 分批次执行
            int batchSize = 5000;
            int batches = (int) Math.ceil((double) paraList.size() / batchSize);
            for (int batchIndex = 0; batchIndex < batches; batchIndex++) {
                int startIndex = batchIndex * batchSize;
                int endIndex = Math.min(startIndex + batchSize, paraList.size());

                for (int i = startIndex; i < endIndex; i++) {
                    Object[] params = paraList.get(i);
                    for (int paramIndex = 0; paramIndex < params.length; paramIndex++) {
                        ps.setObject(paramIndex + 1, params[paramIndex]);
                    }
                    ps.addBatch();
                }

                // 执行当前批次的插入
                results = ps.executeBatch();
            }

            // 计算总共受影响的行数
            int totalRowsAffected = 0;
            for (int r : results) {
                totalRowsAffected += r;
            }

            return totalRowsAffected;

        } catch (BatchUpdateException buex) {
            // 处理批量更新时可能出现的错误
            int[] updateCounts = buex.getUpdateCounts();
            int failedRowIndex = buex.getErrorCode();
            // 这里仅打印错误信息,实际应用中可能需要更详细的错误处理逻辑
            LogUtil.error(log, "批量插入发生错误,失败于第{}条记录", failedRowIndex);
            throw buex;
        } finally {
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException ignored) {
                    // 忽略关闭异常
                }
            }
        }
    }
}

// 使用示例:
ArrayList<Object[]> paraList = ... // 假设这是你的参数列表,每个元素都是一个Object数组,对应一条记录的所有字段值
String sql = "INSERT INTO your_table (column1, column2, column3) VALUES (?, ?, ?)";

try {
    int rowsAffected = batchUpdate(connection, sql, paraList);
    System.out.println("总共插入了 " + rowsAffected + " 条记录.");
} catch (SQLException ex) {
    LogUtil.exceptionPrint(log, ex);
}

步骤思路引导4

在这个版本中,我们遍历参数列表并将它们分批添加到PreparedStatement的批处理队列中,然后一次性执行整个批次的插入操作。同时,在finally块中确保了Statement的关闭,即使在执行过程中出现异常也能保证资源的释放。最后,还处理了可能出现的BatchUpdateException,以便捕获并报告批量插入过程中的任何错误。

在这里插入图片描述
把AI生成的代码复制到自己项目里面也是要人工调整的,AI生成的代码也不是全部正确的,也是的需要有开发基础的,去人工的调试,解决,修改AI生成的代码的!可能遇到有些类引入不到,或者是有些变量不对,异常捕获机制,参数,自己修改!

在这里插入图片描述

步骤思路引导5

我们还需要修改一下这个工具方法的参数

口令3:帮我把这个JAVA方法的ArrayList<Object[]> paraList改成List<ArrayList<Object>> paraList,帮我改下代码

AI回复的内容:

public int batchUpdate(Connection conn, String sql, List<ArrayList<Object>> paraList) {
    PreparedStatement ps = null;
    int[] results = null;
    try {
        ps = conn.prepareStatement(sql);
        // 分批次执行
        int batchSize = 5000;
        int batches = (int) Math.ceil((double) paraList.size() / batchSize);
        for (int batchIndex = 0; batchIndex < batches; batchIndex++) {
            int startIndex = batchIndex * batchSize;
            int endIndex = Math.min(startIndex + batchSize, paraList.size());

            for (int i = startIndex; i < endIndex; i++) {
                ArrayList<Object> params = paraList.get(i);
                for (int paramIndex = 0; paramIndex < params.size(); paramIndex++) {
                    ps.setObject(paramIndex + 1, params.get(paramIndex));
                }
                ps.addBatch();
            }

            // 执行当前批次的插入
            results = ps.executeBatch();
        }

        // 计算总共受影响的行数
        int totalRowsAffected = 0;
        for (int r : results) {
            totalRowsAffected += r;
        }
        return totalRowsAffected;

    } catch (Exception ex) {
        // 这里仅打印错误信息,实际应用中可能需要更详细的错误处理逻辑
        LogUtil.exceptionPrint(log, ex);
    } finally {
        if (ps != null) {
            try {
                ps.close();
            } catch (SQLException ignored) {
                // 忽略关闭异常
            }
        }
    }

    return 0;
}

重复的步骤再粘贴到自己项目跑一跑,然后修改报错,自己再调试,最终解决问题!

笔者经过测试验证,这段代码是真正可以跑的,并且执行成功!

五、人工智能改变生活的笔者总结

你给AI口令,让它生成代码,然后你再修改代码,然后你把代码不断回馈给AI,让它读懂之后,再不断的完善!最终达到目标,让你拿到你要的代码!前提是,你能引领AI,你需要有编程的思路与基础!而且你的口令描述要很具体并且要带有计算机AI可以读懂的逻辑描述!这个笔者会在今后的文章中拿更多的案例讲述!希望大家多关注!!
笔者经过测试验证,这段代码已经真正用到我的ETL项目中,并且再生产中执行,AI人工智能帮我真正提升了工作效率,笔者觉得有AI的加持,笔者的编程水平从有限变成了无限,因为AI是无限自主学习的,它的编程水平肯定高过我们任意一个人,但是我们掌握着逻辑也灵性,我们才是驾驭人工智能的第一批先驱人类,跟笔者一起学习吧!

六、笔者简介

国内某一线知名软件公司企业认证在职员工:任JAVA高级研发工程师,大数据领域专家,数据库领域专家兼任高级DBA!10年软件开发经验!现任国内某大型软件公司大数据研发工程师、MySQL数据库DBA,软件架构师。直接参与设计国家级亿级别大数据项目!并维护真实企业级生产数据库300余个!紧急处理数据库生产事故上百起,挽回数据丢失所造成的灾难损失不计其数!并为某国家级大数据系统的技术方案(国家知识产权局颁布)专利权的第一专利发明人!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579470.html

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

相关文章

总结SQL相对常用的几个字符函数

目录 字符的截取 substr() trim()、ltrim()、rtrim() 字符串的拼接 ||、 字符的大小写转换 upper(column_name):大写 lower(column_name):小写 字符替换 replace() 搜索字符 instr(column_name, substring_to_find,start,n_appearence) charindex(substring_to_fi…

基于SSM框架JAVA仓库管理系统源代码Mysql数据库(可当毕设,实训项目,设计大赛)

仓库管理系统实现的功能包括店铺管理&#xff0c;员工管理&#xff0c;部门管理&#xff0c;商品管理&#xff0c;权限管理&#xff0c;入库管理&#xff0c;出库管理&#xff0c;盘点管理&#xff0c;统计管理等功能。该项目采用了Mysql数据库&#xff0c;Java语言&#xff0c…

龙蜥社区「人人都可以参与开源」一次奇妙的开源之旅

前言: 3月17日&#xff0c;马斯克宣布开源Grok-1&#xff0c;这一举措使Grok-1成为当前参数量最大的开源大语言模型&#xff0c;拥有3140亿参数&#xff0c;远超OpenAI GPT-3.5的1750亿。 开源可促进技术高质量发展&#xff0c;让技术迭代更快&#xff0c;更能适应各行各业的发…

学习操作系统之多道批处理系统

1964年IBM生产了第一台小规模集成电路计算机IBM System/360&#xff08;第三代计算机&#xff09;&#xff0c;并为该计算机开发了OS/360操作系统&#xff0c;是第一个多道批处理系统。 多道批处理的运行机制&#xff1a; 多道批处理系统同样要求事先将多道作业存放到外存上并…

无人机倾斜摄影技术在智慧城市中的应用

随着智慧城市的不断发展和完善&#xff0c;新兴热门技术也不断崛起。无人机技术作为其中之一&#xff0c;具有操作简单、应用灵活等优势&#xff0c;受到了各个行业的青睐。现阶段&#xff0c;无人机技术与5G移动通信系统、人工智能系统深度融合&#xff0c;实现了无人机技术的…

优卡达节能科技给您解读2024第13届生物发酵展

参展企业介绍 苏州优卡达节能科技有限公司位于江苏省苏州市相城区&#xff0c;它脱胎于苏州化工机械厂&#xff0c;是专一技术研发生产螺旋板式换热器的厂家。广泛应用于冶金、焦化、纺织、医药、食品、机械、电力、环保、暖通节能及需要热量转换等工业。 公司具有具有多名研…

IRIS / Chronicles 数据结构备忘录

数据结构的内容主要涉及到索引和全局变量。 这部分的内容的问题在于概念多&#xff0c;和普通的数据库对应的内容也不太一样&#xff0c;需要花点时间了解。 networked items 有关英文的解释是&#xff1a; Networked items that point to databases that use padded-string…

LeetCode-移除元素

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

【Java】Java中类的初始化顺序(静态方法,静态块,非静态块,最后有流程图)

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 在日常使用Java的时候&#xff0c;我们都接触过new这个关键字&#xff0c;那你是否知道在我们的对象真正创建出来之前都做了哪些事情呢&#xff1f; 实际上要去判断一个类的初始化的顺序&#xff0c;需要分一下情况&…

《C++程序设计》阅读笔记【6--类(1)】

&#x1f308;个人主页&#xff1a;godspeed_lucip &#x1f525; 系列专栏&#xff1a;《C程序设计》阅读笔记 本文对应的PDF源文件请关注微信公众号程序员刘同学&#xff0c;回复C程序设计获取下载链接。 1 类1.1 概述1.2 构造函数1.3 析构函数1.4 重载构造函数 2 总结 1 类…

谷歌建站用什么程序比较好?

建网站这回事&#xff0c;说容易也容易&#xff0c;现如今市面上建站的程序多如牛毛&#xff0c;哪怕你不会代码也能建一个漂亮的网站&#xff0c;但网站搭建出来是为了什么&#xff1f;是为了获取流量&#xff0c;拉到业务&#xff0c;那么&#xff0c;建站的时候你就要考虑谷…

关于泛型类型参数的约束

默认情况下&#xff0c;泛型类型参数T可以是任意类型&#xff1b;如果我们希望泛型类型参数希望是某个类型或者是实现某个接口&#xff0c;或者继承某个类&#xff0c;又或者是某一个类型比如值类型&#xff0c;这就需要对类型参数T进行约束&#xff0c;泛型类型参数的约束语法…

二维码门楼牌管理应用平台建设:场所记录与智能化管理

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、二维码门楼牌管理应用平台的功能特点三、二维码门楼牌管理应用平台的建设意义四、结语 前言 随着科技的飞速发展&#xff0c;二维码技术已经深入到了我们生活的方方面面。在城市管理中&#xff0c;二维码门楼牌管理应…

如何使用宝塔面板搭建MySQL数据库并实现无公网IP远程访问

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道 4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性,使得运维难度降低,简化了Linux命令行进行繁琐的配置,下面简单几步,通过宝塔面板cp…

jeecg-boot 3.6使用微服务启动详细配置

1&#xff1a;运行sql文件 2&#xff1a;配置host 路径如下 127.0.0.1 jeecg-boot-redis 127.0.0.1 jeecg-boot-mysql 127.0.0.1 jeecg-boot-nacos 127.0.0.1 jeecg-boot-gateway 127.0.0.1 jeecg-boot-system 127.0.0.1 jeecg-boot-xxljob 127.0.0.1 jeecg-boot-rabbitmq 3…

Databend 开源周报第 139 期

&#x1f4e2; Databend 现已默认启用全新聚合哈希表实现&#xff0c;在 Hits 基准测试中单条查询性能提升最高达 40% &#xff01; Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://…

WPF 多语言切换及ResourceDictionary的Source路径填写

WPF 多语言切换 1. 添加资源字典 新增两个资源字典&#xff0c;里面分别存储不同语言的文本 <ResourceDictionary xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s…

✌2024/4/4—力扣—整数转罗马数字

代码实现&#xff1a; 方法一&#xff1a;硬编码数字 const char *thousands[] {"", "M", "MM", "MMM"}; const char *hundreds[] {"", "C", "CC", "CCC", "CD", "D",…

SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

橘子学JDK之JMH-02(BenchmarkModes)

一、案例二代码 这次我们来搞一下官网文档的第二个案例&#xff0c;我删除了一些没用的注释&#xff0c;然后对代码做了一下注释的翻译&#xff0c;可以看一下意思。 package com.levi;import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import …