(十四)Mybatis当中mysql以及oracle批量新增怎么做?

2023-10-31

这篇文章主要讲述Mybatis当中针对于Mysql和orcle数据库批量新增的做法,写的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。


首先有关于批量新增大部分都会使用到foreach标签,所以写批量的时候我们要了解foreach当中的属性作用。在这里我列出foreach的属性作用,帮助大家回顾一下。

foreach标签

foreach一共有六个属性:

collection:指定要遍历的集合:list类型的参数会特殊处理封装在map中,map的key就叫list
item:将当前遍历出的元素赋值给指定的变量
separator:每个元素之间的分隔符
open:遍历出所有结果拼接一个开始的字符
close:遍历出所有结果拼接一个结束的字符
index:索引。遍历list的时候是index就是索引,item就是当前值
遍历map的时候index表示的就是map的key,item就是map的值

由于mysql和oracle数据库语法略有差异,所以这里分别列出针对于两个不同的批量该如何写

Mysql当中如何做?

第一种写法

Mysql是支持这种语法的,而oracle是不支持的。

insert into tbl_employee( last_name,email,gender,d_id ) values (?,?,?,?) , (?,?,?,?)
<insert id="addEmps">
 	insert into tbl_employee(
 		<include refid="insertColumn"></include>
 	) 
	values
	<foreach collection="emps" item="emp" separator=",">
		(#{emp.lastName},#{emp.email},#{emp.gender},#{emp.dept.id})
	</foreach>
 </insert>

第二种写法

这种方式需要数据库连接属性allowMultiQueries=true;
这种分号分隔多个sql可以用于其他的批量操作(删除,修改)

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
<insert id="addEmps">
 	<foreach collection="emps" item="emp" separator=";">
 		insert into tbl_employee(last_name,email,gender,d_id)
 		values(#{emp.lastName},#{emp.email},#{emp.gender},#{emp.dept.id})
 	</foreach>
 </insert>

Oracle当中如何做?

Oracle不支持values(),(),()
Oracle支持的批量方式

第一种写法

oracle在数据库当中虽然支持多条新增语句一起执行,但是在mybatis当中我们会发现他会报无效字符。所以我们得加上begin 和 end便可避免这种问题。

begin
    insert into employees(employee_id,last_name,email) 
    values(employees_seq.nextval,'test_001','test_001');
    insert into employees(employee_id,last_name,email) 
    values(employees_seq.nextval,'test_002','test_002');
end;

映射文件写法。

<insert id="addEmps" databaseId="oracle">
 	<foreach collection="emps" item="emp" open="begin" close="end;">
 		insert into employees(id,last_name,email) 
		    values(employees_seq.nextval,#{emp.lastName},#{emp.email});
 	</foreach>
 </insert>

第二种写法

oracle是支持这种语法的sql的,两个表互相导入的话,就可以用这种写法。所以我们可以创建临时表来通过这种语法完成批量新增。

insert into 表1(列名1,列名2,.....) select 列名1,列名2,.....from 表2

使用union来串联起来多行数据,当做临时表

insert into employees(employee_id,last_name,email)
      select employees_seq.nextval,lastName,email from(
             select 'test_a_01' lastName,'test_a_e01' email from dual
             union
             select 'test_a_02' lastName,'test_a_e02' email from dual
             union
             select 'test_a_03' lastName,'test_a_e03' email from dual
      )

xml映射文件写法

<insert id="addEmps"  databaseId="oracle">
	insert into employees(
		id,last_name,email
	)
	<foreach collection="emps" item="emp" separator="union"
		open="select employees_seq.nextval,lastName,email from("
		close=")">
		select #{emp.lastName} lastName,#{emp.email} email from dual
	</foreach>
</insert>

总结

相对来说写的还算凑合,感觉小编整理的还可以的,确实您也学到了,麻烦帮小编点个关注或者点个赞,哈哈哈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

(十四)Mybatis当中mysql以及oracle批量新增怎么做? 的相关文章

随机推荐

  • 超分辨率概述

    1 什么是超分辨率增强 Video super resolution is the task of upscaling a video from a low resolution to a high resolution 超分辨率 Supe
  • Git & GitHub 入门6:用好commit message

    git log 可以查看所有的 commit messages 修改repo中的文件内容后 add该文件 直接运行命令git commit进入message编辑状态 可以输入多行commit message说明 完成后点击ECS键退出编辑
  • Gin-swaggo为gin框架提供Swagger 文档

    官方 https github com swaggo gin swagger 开始使用 为API方法增加注释 加在controller api 层 See Declarative Comments Format 运行下面命令下载swgo g
  • L2-4 部落PTA

    在一个社区里 每个人都有自己的小圈子 还可能同时属于很多不同的朋友圈 我们认为朋友的朋友都算在一个部落里 于是要请你统计一下 在一个给定社区中 到底有多少个互不相交的部落 并且检查任意两个人是否属于同一个部落 输入格式 输入在第一行给出一个
  • hadoop3.2.1编译安装

    基础环境 centos 7 7 三台 hadoop需要的环境 Requirements Unix System JDK 1 8 Maven 3 3 or later ProtocolBuffer 2 5 0 CMake 3 1 or new
  • echart 折线图设置y轴单位_如何让echarts中y轴的单位位于数值的右上角

    展开全部 1 创建折线图的数据区 包括年份和数据 2 仅选择数据区创建折线图 插入选项卡 图表62616964757a686964616fe78988e69d8331333363396364工具组 折线图 3 得到的折线图x坐标不满足要求
  • c++可变参数模板函数

    可变参数模版函数 类型一致 可变参数 使用头文件 cstdarg va list arg ptr 开头指针 va start arg ptr n 从开头开始读取n个 va arg arg ptr T 根据数据类型取出数据 va end ar
  • jdk1.8升级后 sun.io.CharToByteConverter 错误处理

    项目工程中用到jdk1 6相关方法 可以使用 但是升级到jdk1 8以后 编译出现java lang NoClassDefFoundError sun io CharToByteConverter错误 后经查询 是jdk1 8版本中已经从s
  • 前端02:CSS选择器等基础知识

    CSS基础选择器 设置字体样式 文本样式 CSS的三种引入方式 能使用Chrome调试工具调试样式 HTML专注做结构呈现 样式交给CSS 即结构 HTML 和样式CSS相分离 CSS主要由量分布构成 选择器以及一条或多条声明 选择器 给谁
  • 深度学习10篇文章之Interleaved Group Convolution

    本文主要讲解Ting Zhang的Interleaved Group Convolutions for Deep Neural Networks 该文对Group convolution有较为详细的讲解 Abstract 文章开篇引出了 I
  • 新昌中学2021高考成绩查询,2021绍兴市地区高考成绩排名查询,绍兴市高考各高中成绩喜报榜单...

    距离2018年高考还有不到一个月的时间了 很多人在准备最后冲刺的同时 也在关心高考成绩 2018各地区高考成绩排名查询 高考各高中成绩喜报榜单尚未公布 下面是往年各地区高考成绩排名查询 高考各高中成绩喜报榜单 想要了解同学可以参考下 同时关
  • 轻松学懂图(下)——Dijkstra和Bellman-Ford算法

    概述 在上一篇文章中讲述了Kruskal和Prim算法 用于得到最小生成树 今天将会介绍两种得到最短路径的算法 Dijlkstra和Bellman Ford算法 Dijkstra算法 算法的特点 属于单源最短路径算法 什么是单源呢 通俗的说
  • 前端使用自定义指令实现埋点【vue3】

    vue项目有时候会需要进行数据采集 记录用户行为习惯 而且很多页面都会使用到 所以用vue自定义指令来实现埋点功能 埋点的几种方式 页面埋点 浏览次数及时长等 点击埋点 每一次点击行为 曝光埋点 统计区域是否被用户浏览 import cre
  • 神经网络量化----TensorRT深刻解读

    神经网络量化 TensorRT深刻解读 目录 神经网络量化 TensorRT深刻解读 前言 一 TensorRT简介 二 难点 1 架构 2 功能 三 实现 1 conv和ReLU的融合 2 conv和ReLU的融合 quant utils
  • oracle 解锁 账户_oracle用户解锁三种方法

    ORA 28000 the account is locked 的解决办法 2009 11 11 18 51 ORA 28000 the account is locked 第一步 使用 PL SQL 登录名为 system 数据库名称不变
  • python cplex优化包工具箱教程

    python cplex优化包教程 在做优化课题时 常常需要用到优化算法 个人优化算法专栏链接如下 最优化实战例子 需要掌握一些优化算法 但是一些比较出名的优化工具箱还是要会用 今天讲解下cplex工具箱 CPLEX Optimizer 是
  • RocketMQ-实际开发中遇到的几个问题

    消息幂等性 什么是幂等性 一个操作任意执行多次与执行一次的结果相同 这个操作就是幂等 生产者发送消息之后 为了确保消费者消费成功 我们通常会采用手动签收方式确认消费 MQ就是使用了消息超时 重传 确认机制来保证消息必达 场景 1 订单服务
  • 使用Spark ALS模型 + Faiss向量检索实现用户扩量实例

    1 通过ALS模型实现用户 商品Embedding的效果 获得其向量表示 准备训练数据 M U I R 即 用户集U 商品集I 及评分数据R 1 商品集I的选择 可以根据业务目标确定商品候选集 比如TopK热度召回 或者流行度不高但在业务用
  • vite-plugin-svg-icons没有createSvgIconsPlugin成员

    这天运行项目的时候发现报错 大概意思就是在vite plugin svg icons中没有发现createSvgIconsPlugin模块 createSvgIconsPlugin is declared but its value is
  • (十四)Mybatis当中mysql以及oracle批量新增怎么做?

    这篇文章主要讲述Mybatis当中针对于Mysql和orcle数据库批量新增的做法 写的非常详细 对大家的学习或者工作具有一定的参考学习价值 需要的朋友们下面随着小编来一起学习学习吧 目录 foreach标签 Mysql当中如何做 第一种写