SpringBootMybatis批量插入Oracle数据库数据

目录

前端数据

数据表结构

后端Controller:

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 Mybatis批量插入Oracle数据库数据的文章就介绍到这了,更多相关SpringBoot 批量插入Oracle 内容请搜索易知道(ezd.cc)以前的文章或继续浏览下面的相关文章希望大家以后多多支持易知道(ezd.cc)!

推荐阅读

    oracle中NUMBER类型和java中对应类型

    oracle中NUMBER类型和java中对应类型,类型,数据类型,问题: 今天在项目中遇到数据库中输入的值在web页面中会自动转变为科学计数,oracle中字

    oracle中dmp文件是什么文件

    oracle中dmp文件是什么文件,文件,数据库,在oracle中,dmp文件是数据库导出的文件,常用于数据库的备份和迁移;例如在dmp文件导入时,需要先把dmp

    oracle 11g中的g是什么意思

    oracle 11g中的g是什么意思,网格,方面,在oracle中,11g中的g是网格运算的意思,是grid的缩写;oracle 11g的版本是为了迎合分布式计算而做出的变

    Oracle常用ASM操作命令

    Oracle常用ASM操作命令,磁盘,路径,在Oracle RAC环境下,使用grid帐号执行运行asmcmd进入asm命令模式,如:[grid@oradb-node1 ~]$ asmcmdASMCMD>

    oracle数据库 存储过程

    oracle数据库 存储过程,存储过程,语句,数据库,执行,编译,参数,Oracle是世界上最出名的关系数据库管理系统之一,它支持面向对象的编程,优化的存储

    如何创建oracle用户(过程浅析)

    如何创建oracle用户(过程浅析),用户,命令,授权,角色,数据库,权限,Oracle是一种广泛使用的关系型数据库管理系统,它可以有效地存储、管理和操作大量

    oracle有哪些版本

    oracle有哪些版本,版本,数据库,企业,推出,性能,新技术,oracle的版本有:1、Oracle 7;2、Oracle 8i;3、Oracle 9i;4、Oracle 10g;5、Oracle 11g;6、Orac

    mysql与oracle有区别吗

    mysql与oracle有区别吗,数据库,数据,关系数据库,管理系统,语句,开源,mysql与oracle有区别:1、Oracle是一个对象关系数据库管理系统(ORDBMS),而MySQL

    oracle怎么锁表

    oracle怎么锁表,锁定,共享锁,排它锁,获取,用户,修改,在Oracle数据库中,当多个用户同时访问同一个表时,可能会出现数据混乱的情况,这时候我们可能需

    oracle的函数有哪些

    oracle的函数有哪些,函数,日期,数字,字符串,四舍五入,操作,oracle的函数有:1、字符串函数,包括ASCII()、CONCAT()等;2、数字函数,包括ABS()、COS()

    oracle视图和表的区别是什么

    oracle视图和表的区别是什么,视图,数据,修改,基表,姓名,语句,区别:1、视图是已经编译好的sql语句,而表不是;2、视图没有实际的物理记录,而表有;3、表

    oracle 如何创建表

    oracle 如何创建表,约束条件,字段,数据类型,创建表,主键,类型,Oracle 是目前最为流行的关系型数据库之一,它的表创建相对比较复杂,但是只要了解了