SpringBoot-Mybatis批量插入Oracle数据库数据

Mybatis+Oracle批量插入方法总结 最近因为处理Oracle 12c GBK字符集情况下特殊符号(如Ø等)的问题,无法使用mabatisPlus的saveBatch方法,需要在mapper.xml中手写方法,又受框架所限,有些语法不支持,耗费了几天时间,最终通过下面地第一种方式实现,特在此总结一下。 阅读详情

前端数据

有如下需求,前端提交一个对象cabinData,保存到数据表中,对象结构如下:

 {
     "shipId":"424",
     "shipName":"大唐2号",
     "ballastCabinData":["艏尖舱","双层底1左","双层底1右","双层底2左","双层底2右","双层底3左","双层底3右","双层底4左","双层底4右","双层底5左","双层底5右","顶边5左","顶边5右","尾尖舱"],
     "freshCabinData":["淡水舱1左","淡水舱1右"]
 }

数据表结构

数据表是oracle,表结构为:

后端Controller:

 @PostMapping("/savecabin")
 public AjaxResult savecabin(@RequestBody Map<String,Object> postCabinData){
 ​
     // 获取map中的参数
     String shipIdStr = (String) postCabinData.get("shipId");
     Integer shipId = Integer.valueOf(shipIdStr);
     String shipName = (String) postCabinData.get("shipName");
     List<String> ballastCabinData = (List<String>) postCabinData.get("ballastCabinData");
     List<String> freshCabinData = (List<String>) postCabinData.get("freshCabinData");
 ​
     // 获取shipid下的所有的船舱记录
     List<DraftCabin> list = draftCabinService.selectCabinByShipId(shipId);
     // 船舱记录大于0时,执行批量删除;船舱
     if (list.size()>0){
         List<Long> idcards= list.stream().map(DraftCabin::getCabinId).collect(Collectors.toList());
         Long[] ids = idcards.toArray(new Long[idcards.size()]);
         draftCabinService.deleteDraftCabinByIds(ids);
     }
     // 批量插入船舱
     draftCabinService.insertDraftCabins(ballastCabinData,shipId,"压舱水",shipName);
     draftCabinService.insertDraftCabins(freshCabinData,shipId,"淡水",shipName);
 ​
     return AjaxResult.success();
 }

解析:

  • 使用Map<String,Object> 来接收前端cabinData的JSON对象:

    使用map.get("shipId")方法来解析JSON获得对应的值。

  • 批量删除时,使用list.stream().map(DraftCabin::getCabinId).collect(Collectors.toList())方法,使用类中的getCabinId方法来将结果集中的cabbinId形成数组参数,入参批量删除方法deleteDraftCabinByIds

  • 批量插入时,调用service的insertDraftCabins方法,传入四个参数(ballastCabinData,shipId,"压舱水",shipName)

mapper:

 public int insertDraftCabins(@Param("DraftCabin")List DraftCabin, @Param("shipId")Integer shipId, @Param("cabinType")String cabinType,@Param("shipName")String shipName) ;

解析:

mapper中,多个参数使用@Param注解来接收,在mybaits的xml中,调用注解名称。

xml

 <!--批量新增-->
 <insert id="insertDraftCabins" useGeneratedKeys="false">
     INSERT ALL
     <foreach collection="DraftCabin" item="item" index="index">
         INTO draft_cabin
         (cabin_name,ship_id,cabin_type,ship_name)
         values(#{item},#{shipId},#{cabinType},#{shipName,jdbcType=VARCHAR})
     </foreach>
     SELECT 1 FROM DUAL
 </insert>

解析:

  • 批量新增insertDraftCabins,接收多个参数,这时不要添加parameterType属性,useGeneratedKeys="false",一定要添加;

  • foreach的collection是要遍历的对象,这里填写mapper中的注解名称;

  • orcale的批量插入方法与mysql有很大区别,这里需要注意以下:

     insert all
         into <tableName>[(<table_column1>,<table_column2>...)] 
         values([<column_value1>,<column_value2>...]) 
         [into <tableName>[(<table_column1>,<table_column2>...)] 
         values([<column_value1>,<column_value2>...])]...
     select  <table_value1>[,<table_value2>...] from dual;
    

     

SpringBoot 项目从Oracle迁移至国产海量数据库实战指南 本文详细介绍了如何将SpringBoot项目从Oracle迁移至国产海量数据库Vastbase的实战指南。内容涵盖环境准备、SQL兼容性处理、MyBatis-Plus和Quartz的适配,以及迁移后的验证与优化。文章特别强调了数据类型映射、SQL语法调整等关键点,帮助开发者高效完成数据库迁移,实现成本优化和技术自主可控。 阅读详情

相关推荐

springBoot+mybatis+多数据源(oracle+mysql)

目录 一、说明 二、具体实现 1、制造数据源数据 1)oracle数据库 2)mysql数据库 2、整体项目位置 3、配置文件—application.properties 4、FirstDataSourceConfig 5、SecondDataSourceConfig 6、po类 7、xml 8、mapper接口 9、service层 10、controller层 三、测试 四、经验收获 一、说明 本篇文章主要解决springBoot+mybatis读取多数据源问题,这

hyj 4632

mybatis批量插入数据到ORACLE

一、mybatis批量插入数据到Oracle中的两种方式: 第一种: <insert id="addList" parameterType="java.util.List" useGeneratedKeys="false"> INSERT ALL <foreach item="item" index="index" collection="list"&...

zy_9506的博客 458

数据库迁移 数据迁移 千万级 亿万级数据MySQL oracle关系型

现需要开发一套程序用来快速迁移数据库,要求如下: 1.使用人员可以指定迁移数据库类型 如:(orcal,sqlServer,csv 迁移至mysql) 2.在迁移数据库时,可以只迁移指定字段. 3.开发多任务的平台,按权重去执行任务,如:权重为1,1,2,3,4 那么1,1的权重一起执行,执行完毕后2 然后3 以此类推 4.保护数据完整性,设计失败处理

【经典】Mybatis百万级高效批量插入

Mybatis百万级高效批量插入

GeeLoong`s Blog 6647

Frida实战:高效dump Android内存中的so文件与修复技巧

本文详细介绍了使用Frida工具dump Android内存中已解密so文件的实战技巧。针对加固应用静态分析失效的痛点,文章提供了从环境搭建、使用frida_dump脚本自动化抓取内存数据,到利用SoFixer工具修复ELF文件结构的完整流程,帮助逆向分析人员高效获取可分析的so文件。

tt34567的博客 527

接口操作MySQL跟MongoDB事务回滚问题

通常使用的事务注解:@Transactional 是不会对MongoDB生效的,但是在一些生产接口中无法避免同时使用MySQL跟MongoDB的操作。

weixin_45932023的博客 1578

SpringBoot+Mybatis批量插入Oracle数据库方法

oracle 批量插入与mysql 的批量插入的方式是不同的, insert into tablename()values(),(),(); ---这个是mysql 的批量插入形式 insert all into tablename() values() into tablename() values() -------这个是Oracle批量插入形式 下面记录: mybaits ...

这里记录着我一点一滴的进步 3145

CMOS锁相环核心:四种鉴频鉴相器(PFD)结构深度剖析与选型指南

本文深入剖析了CMOS锁相环中四种鉴频鉴相器(PFD)的结构与性能,包括传统RS触发器型、非时钟型、预充电型和边沿触发型PFD。通过详细的电路分析、实测数据和工程案例,提供了PFD选型的实用指南,帮助工程师根据速度、功耗和精度需求选择最优方案,提升锁相环设计效率。

weixin_42530458的博客 586

Springboot结合Mybatis-Plus,Oracle数据库批量插入数据sql语句

在使用Oracle数据库,批量插入语句与Mysql不同,Mysql的批量插入语句在Oracle中不适应,这里主要记录一下Oracle的批量插入语句应该怎么写。这样的sql类似表迁移,Oracle还有其他的批量插入,但需要额外的配置,这个不需要,比较简单。接口传参也需要是list类型。

qq_50801874的博客 1011

避坑指南:ZYNQ PS端读写BRAM时容易忽略的5个配置细节(基于Vivado 2022.1)

本文基于Vivado 2022.1,总结了ZYNQ PS端读写单口BRAM时5个易被忽略的关键配置细节。内容涵盖关闭Safety Circuit以优化时序、精确匹配AXI控制器与BRAM的地址深度、注意PS端函数位宽与地址对齐、正确连接时钟复位域,并提供了实用的调试技巧与诊断代码,帮助工程师规避常见陷阱,确保数据交互稳定可靠。

net55的博客 373

WSL 运行make提示/lib/modules/xxx/build: No such file or directory. Stop.错误解决办法

WSL运行make提示/lib//modules/xxx文件或目录不存在。 WSL2的内核是修改过的,无法使用 ubuntu上游的内核头文件和modules文件,因此,我们需要手动编译并安装一个版本。

weixin_45668903的博客 1万+

SpringBoot+Mybatis一次条件插入批量数据进oracle数据库的方法

<insert id="addProToActivity" parameterType="java.util.ArrayList"> INSERT INTO TGP_SM_ACTIVITY_PRODUCT(ID,PRODUCT_CODE,TYPE,ACTIVITY_ID, OPERATE_NAME,OPERATE_ID,OPERATE_TIME,CATEGORY) ...

这里记录着我一点一滴的进步 1353

冗余位技术在SAR ADC中的动态误差恢复机制解析

本文深入解析了冗余位技术在SAR ADC中的动态误差恢复机制,详细介绍了其基本概念、动态误差产生原因及冗余位的容错空间设计、时序松弛策略和数字校正算法。通过实际电路设计案例和数学建模,展示了冗余位技术如何显著提升ADC的精度和能效比,同时探讨了未来发展方向。

weixin_28335283的博客 973

SpringBoot中使用mybatis将list集合插入到Oracle数据库(亲测有用!)

SpringBoot项目,使用mybatis将list集合,通过foreach插入到Oracle数据库(亲测有用!)

chenaweiachen的博客 3168

轻量化部署实战:C#上位机集成AI模型的3种方案深度对比(ML.NET/ONNX/TensorFlow.NET)

C#上位机部署AI模型,核心不是“选最强大的方案”,而是“选最适配的方案”——工控机的低配置、高稳定性需求,决定了“轻量化”和“部署简单”是选型的首要原则。回顾3种方案:ML.NET:原生、轻量化、零依赖,适合传统ML场景,低配置工控机首选;ONNX Runtime:通用、平衡、易落地,适合深度学习场景,工业落地首选;TensorFlow.NET:强大、灵活、纯C#,适合复杂模型,高配置工控机首选。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 361

闲鱼爬虫实战:模拟手机端破解反爬策略,爬取指定商品搜索数据,爬取闲鱼搜索指定商品(需手机端模拟)o 技术点:抓包分析、cookie与token

技术点作用抓取手机 App 请求,分析 API 结构、Header、参数加密情况requestsPython 中最常用的 HTTP 库,用于发送模拟请求Session 对象自动管理 Cookie,保持会话User-Agent & 设备特征模拟手机型号、系统版本,绕过服务端检测闲鱼部分接口存在签名,需要逆向或复用有效 Token多线程/异步提高爬取效率(需节制,避免封 IP)解析 HTML 或 JSON 数据注意:闲鱼的接口加密程度中等偏上,部分接口存在动态签名(如x-signx-mini-wua。

2201_76125261的博客 712

oracle数据库批量插入

之所以出现上面的错误,是因为对oracle数据库的多行插入语句不够了解。oracle数据库的插入多行数据和mysql数据库中插入多条数据的SQL语句并不相同。

qq_44286009的博客 2794

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql注解批量添加mybatis_Springboot+Mybatis(Mysql 、Oracle) 注解和使用Xml两种方式批量添加数据...

1、使用注解的方式批量添加数据,在该方法中,传进来的参数是一个List集合,使用一个foreach 循环解析集合的数据,最后再批量保存到数据库代码如下://批量保存@Insert({"","insert into QUESTION_BANK (NAME, SUBJECT, TYPE,OPTION_A,OPTION_B,OPTION_C,OPTION_D,OPTION_E,OPTION_F,ANSW...

weixin_39602571的博客 216

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

关于springboot的批量操作

1.描述:分为mysql和oracle的数据库来区别其实在springboot里区别就在配置文件和mybatis的编写,其他的都可以完全复用。 2.各层级 a.controller,可以复用,同时写了个定时器每天下午五点只要服务启动了就会跑一遍接口。 package com.example.demo.controller; import com.alibaba.fastjson.JSONObje...

weixin_45214099的博客 2421

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

常用工具类之九 大数据量批量插入/修改sql效率优化,及解决sqlserver最大参数2100的问题 (基于springboot及mybatis)

调用方法工具类 用到了google的guava包,依赖如下 <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>24.0-jre</version> <scope>compile</scope&g

taylor的博客 2156

SpringBoot+Mybatis+Oracle 项目搭建

SpringBoot+Mybatis+Oracle 项目搭建

多喝热水♨️ 6058

merge_start-with_批量插入-高级语法(2)-Oracle

本文主要介绍一些在实际项目中用到的一些ORACLE高级语法,实例采用实际项目中的例子。项目为前后端分离,主要技术架构: vue+elementui+springboot+mybatis+oracle。 1、merge into 语法 merge into a using b on (条件) when not matched then 插入语句 when matched then 更新语句 适用情况:使用merge into 一般用于表的插入或者更新,当插入和更新的字段相差不多,而你又不想在项

gaogzhen的博客 378

Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql

【代码】Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql。

优快云博客专家、华为云享专家、Java领域新星创作者 1705

MyBatis的Oracle批量添加报错记录

Mysql和Oracle使用MyBatis的foreach批量insert写法

qq_37507261的博客 1093

springboot excel上传并且存入oracle数据库

上一篇写了springboot 下载excel 模板,目前有个需求是把 下载的excle 填上数据 上传,并且保存的数据库,这边只针对后台操作 @Transactional 事务标识 @RequestMapping(value = "/upload") @ResponseBody public RetData<String> upload(HttpServletReques...

weixin_30730053的博客 451

多线程插入数据库方案

java运行// 实体类// getter/setter 省略// Mapper接口(MyBatis)// 批量插入(MyBatis批量语法)自定义线程池 + 连接池(HikariCP) + 数据库操作封装(JdbcTemplate/MyBatis);小数据量用「多线程单条插入」,大数据量用「多线程 + MyBatis 批量插入」;关键配置:线程池参数匹配连接池、开启 MySQL 批量插入优化、做好异常捕获和事务控制。

2301_77162755的博客 382
上一篇: 太好用了!MySQL8的150高效技巧,你不会还不知道吧?
下一篇: Iptables防火墙limit模块扩展匹配规则
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值