Mybatis实现批量添加
1.设计一张商品表
CREATE TABLE IF NOT EXISTS goods (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL
);
2.编写实体类映射数据库表格
@Data
public class Goods {private Long id;private String name;// Getters and Setters
}
3.编写持久层接口以及其对应sql
@Mapper
public interface GoodsMapper {@Insert("<script>" +"INSERT INTO goods (name) VALUES " +"<foreach collection='goodsList' item='item' separator=','>" +"(#{item.name})" +"</foreach>" +"</script>")void batchInsert(@Param("goodsList") List<Goods> goodsList);
}
4.编写服务层类
@Service
public class GoodsService {@Autowiredprivate GoodsMapper goodsMapper;public void batchInsertGoods(List<Goods> goodsList) {goodsMapper.batchInsert(goodsList);}
}
5.编写控制层类
@RestController
@RequestMapping("/api/goods")
public class GoodsController {@Autowiredprivate GoodsService goodsService;@PostMapping("/batch")public String batchInsertGoods(@RequestBody List<Goods> goodsList) {try {goodsService.batchInsertGoods(goodsList);return "Batch insert successful";} catch (Exception e) {return "Batch insert failed: " + e.getMessage();}}
}
6.编写前端页面进行批量插入测试
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>批量插入商品</title><style>body {font-family: Arial, sans-serif;background-color: #f4f4f9;margin: 0;padding: 0;display: flex;justify-content: center;align-items: center;height: 100vh;}.container {background-color: white;padding: 20px;border-radius: 8px;box-shadow: 0 0 15px rgba(0, 0, 0, 0.1);width: 300px;}h1 {text-align: center;color: #333;}input[type="text"] {width: calc(100% - 22px);padding: 10px;margin-bottom: 10px;border: 1px solid #ccc;border-radius: 4px;}button {width: calc(50% - 6px);padding: 10px;margin: 2px;border: none;border-radius: 4px;background-color: #007BFF;color: white;cursor: pointer;}button:hover {background-color: #0056b3;}ul {list-style-type: none;padding: 0;}li {background-color: #f9f9f9;padding: 10px;margin-bottom: 5px;border-radius: 4px;border: 1px solid #ddd;}</style>
</head>
<body>
<div class="container"><h1>批量插入商品</h1><form id="goodsForm"><input type="text" id="goodName" placeholder="请输入商品名称"/><div style="display: flex; justify-content: space-between;"><button type="button" onclick="addGood()">添加商品</button><button type="button" onclick="submitGoods()">提交商品</button></div></form><ul id="goodsList"></ul>
</div><script>let goods = [];function addGood() {const goodName = document.getElementById('goodName').value.trim();if (goodName !== '') {goods.push({name: goodName});renderGoods();document.getElementById('goodName').value = '';}}function renderGoods() {const goodsListElement = document.getElementById('goodsList');goodsListElement.innerHTML = '';goods.forEach((good, index) => {const li = document.createElement('li');li.textContent = `${index + 1}: ${good.name}`;goodsListElement.appendChild(li);});}async function submitGoods() {const response = await fetch('/api/goods/batch', {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify(goods)});const result = await response.text();alert(result);if (response.ok) {goods = [];renderGoods();}}
</script>
</body>
</html>
相关文章:

Mybatis实现批量添加
1.设计一张商品表 CREATE TABLE IF NOT EXISTS goods (id BIGINT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255) NOT NULL );2.编写实体类映射数据库表格 Data public class Goods {private Long id;private String name;// Getters and Setters }3.编写持久层接口以及其对应…...
golang 内存对齐和填充规则
内存对齐和填充规则 对齐要求:每个数据类型的起始地址必须是其大小的倍数。 int8(1字节):不需要对齐。int16(2字节):起始地址必须是2的倍数。int32(4字节):起…...

【YashanDB认证】yashandb23.3.1 个人版单机部署安装实践
YCA报名链接如下: YashanDB|崖山数据库系统YashanDB学习中心-YCA认证详情 目前免费 主要参考文档: 单机(主备)部署 | YashanDB Doc 另外还参考摩天轮文章: YashanDB 23.2.9.101 企业版安装步骤抢先看! - 墨天轮 …...
安全渗透测试的全面解析与实践
引言 随着网络安全威胁的日益增加,企业和组织对自身系统的安全性提出了更高的要求。安全渗透测试(Penetration Testing,简称渗透测试)作为主动发现和修复系统安全漏洞的重要手段,已成为安全防护体系中的关键环节。本文…...
通俗易懂的分类算法之决策树详解
通俗易懂的分类算法之决策树详解 1. 什么是决策树? 决策树是一种像树一样的结构,用来帮助我们对数据进行分类或预测。它的每个节点代表一个问题或判断条件,每个分支代表一个可能的答案,最后的叶子节点就是最终的分类结果。 举个…...
【OpenCV C++】以时间命名存图,自动检查存储目录,若不存在自动创建, 按下空格、回车、Q、S自动存图
文章目录 // 保存图像的函数 void saveImage(const cv::Mat& frame) {// 生成唯一文件名auto now = std::chrono::system_clock::...
post get 给后端传参数
post 方式一 : data: params 作为请求体(Request Body)传递: 你已经展示了这种方式,通过data字段直接传递一个对象或数组。这种方式通常用于传递复杂的数据结构。dowmfrom: function (params) { return request({ u…...
数据仓库的特点
数据仓库的主要特点可以概括为:面向主题、集成性、非易失性、时变性、高性能和可扩展性、支持复杂查询和分析、分层架构以及数据质量管理。 1. 面向主题(Subject-Oriented) 数据仓库是面向主题的,而不是面向事务的。这意味着数据…...

任务9:交换机基础及配置
CSDN 原创主页:不羁https://blog.csdn.net/2303_76492156?typeblog 一、交换机基础 交换机的概念:交换机是一种网络设备,用于连接多台计算机或网络设备,实现数据包在局域网内的快速交换。交换机基于MAC地址来转发数据包&#x…...

ArcGIS操作:07 绘制矢量shp面
1、点击目录 2、右侧显示目录 3、选择要存储的文件夹,新建shp 4、定义名称、要素类型、坐标系 5、点击开始编辑 6、点击创建要素 7、右侧选择图层、创建面 8、开始绘制,双击任意位置结束绘制...
【AI深度学习基础】NumPy完全指南终极篇:核心功能与工程实践(含完整代码)
NumPy系列文章 入门篇进阶篇终极篇 一、引言 在完成NumPy入门篇的基础认知与进阶篇的特性探索后,我们终于迎来这场终极技术深潜。本文不再停留于API使用层面,而是直指NumPy的架构内核与高性能工程实践的本质矛盾。作为Python科学计算领域的基石&#…...

Golang语法特性总结
1.认识Golang代码特性 package main //1.包含main函数的文件就是一个main包--当前程序的包名// import "fmt" // import "time" import("fmt""time" )//3.同时包含多个包 4.强制代码风格:函数的 { 一定和函数名在同一行,否…...
Java并发编程利器CyclicBarrier:从使用到源码深度解析,掌握多线程同步的艺术
引言 在多线程编程中,你是否遇到过这样的需求? 多线程分阶段处理数据,每个阶段完成后等待其他线程 并行计算任务需要多次同步汇总结果 模拟高并发场景下多个线程同时触发操作 CyclicBarrier(循环屏障)正是解决这类问题的神器!与CountDownLatch不同,它支持重复使用和自定…...

1.从0搭建前端Vue项目工程
我们通过vue官方提供的脚手架Vue-cli来快速生成一个Vue的项目模板。 **注意:**需要先安装NodeJS,然后才能安装Vue-cli。 环境准备好了,接下来我们需要通过Vue-cli创建一个vue项目,然后再学习一下vue项目的目录结构。Vue-cli提供了…...

3D Web轻量化引擎HOOPS Communicator的核心优势解析:高性能可视化与灵活部署!
在当今数字化时代,工业领域的工程应用不断向基于Web的方向发展,而HOOPS Web平台作为一款专为构建此类工程应用程序打造的软件开发套件集,正发挥着日益重要的作用,成为构建强大工程应用的基石。 一、HOOPS Web平台概述 HOOPS Web…...

DeepSeek集成到VScode工具,让编程更高效
DeepSeek与VScode的强强联合,为编程效率树立了新标杆。 DeepSeek,一款卓越的代码搜索引擎,以其精准的索引和高速的检索能力,助力开发者在浩瀚的代码海洋中迅速定位关键信息。 集成至VScode后,开发者无需离开熟悉的编辑…...
Excel-to-JSON v2.0.0发布,可以在Excel内部,把Excel表格转换成JSON,嵌套的JSON也能转
本文是Excel-to-JSON插件的官方文档 https://excel-to-json.wtsolutions.cn 简化浓缩翻译的中文版,仅供参考。详细的还请查看官方文档。 在数据处理和交换的过程中,将Excel文件转换为JSON格式是一项常见需求。Excel-to-JSON作为一款Microsoft Excel插件…...
深度探索:美团开源DeepSeek R1 INT8量化技术的性能革命
摘要 美团搜索推荐机器学习团队近日发布了一项重要开源成果——DeepSeek R1的INT8无损满血版。该模型部署在A100硬件上,采用INT8量化技术,在保持BF16精度的同时,实现了高达50%的吞吐量提升。这一突破使得老旧显卡无需更换硬件即可获得显著性能…...
gn学习存档
以下答案均由deepseek提供,仅作学习存档。 1. 举例说明action和action_foreach区别 场景设定 假设需要处理一组文件: 输入文件:src/data/file1.txt, src/data/file2.txt, src/data/file3.txt处理逻辑:将每个 .txt 文件转换为 …...

扩展Windows磁盘的技术型教学文章
在Windows操作系统中,扩展磁盘是一项常见的任务,特别是当您需要增加存储空间以容纳更多数据时。以下是一份技术性的教学文章,介绍如何在Windows系统中扩展磁盘: #### 步骤一:打开磁盘管理器 1. 按下 Win X 组合键&a…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...

协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...

Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...

aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)
目录 🔍 若用递归计算每一项,会发生什么? Horners Rule(霍纳法则) 第一步:我们从最原始的泰勒公式出发 第二步:从形式上重新观察展开式 🌟 第三步:引出霍纳法则&…...