当前位置: 首页 > news >正文

【mybatis】mapper.xml中foreach的用法,含批量查询、插入、修改、删除方法的使用

一、xml文件中foreach的主要属性
foreach元素的属性主要有 collection,item,index,separator,open,close。
collection: 表示集合,数据源
item :表示集合中的每一个元素
index :用于表示在迭代过程中,每次迭代到的位置
separator :表示在迭代时数据以什么符号作为分隔符
open :表示该语句以什么开始
close :表示以什么结束

二、foreach批量查询数据
1、当查询的参数只有一个时

例如:findByIds(List ids)
a.如果参数类型为List,在使用时,collection的属性需指定为list
b.如果参数类型为数组,则在使用时,collection属性需指定为array

<select id="findByIdsMap" resultMap="BaseResultMap">
         Select  sum(mark)
         from table_user where user_id in
                  <foreach item="item" index="index" collection="list" 
                         open="(" separator="," close=")">
                        #{item}
                </foreach>
  </select> 

2、当查询的参数是一个对象时

例如:findByIds(List userList)

<select id="findByIdsMap" resultMap="BaseResultMap">
         Select sum(mark)
         from table_user where user_id in
                  <foreach item="item" index="index" collection="list" 
                         open="(" separator="," close=")">
                        #{item.userId}
                </foreach>
  </select> 

三、foreach批量插入数据
实现foreach批量插入数据有两种方法,一种是只发送一条 SQL,插入的多条数据之间通过”,” 分隔开,另一种方式是每插入一条数据就发送一条 SQL 语句,多个 SQL 语句之间用“;”分割。

1.一条 SQL 批量插入数据
对应的Mapper接口代码如下:

/** 返回值为 Integer 类型 */
Integer addStudentByList(@Param("list") List<Student> list);
1
2
对应的SQL 映射文件如下:

<insert id="addStudentByList" parameterType="">
    INSERT INTO Student(username, age, password) VALUES 
    <foreach collection="list" item="item" separator=",">
        (#{ item.username}, #{ item.age}, #{ item.password})
    </foreach>
</insert>

2.执行多条 SQL 批量插入数据
对应的Mapper接口代码和一条 SQL 批量插入数据相同
对应的SQL 映射文件在一条 SQL 批量插入数据的基础上修改如下:

<insert id="addEmpsByList" parameterType="com.jas.mybatis.bean.Employee">
    <!-- 每插入一条数据就执行一次 SQL,中间用";"分隔开  -->
    <foreach collection="list" item="emp" separator=";">
        INSERT INTO Student(username, age, password) VALUES
        (#{ item.username}, #{ item.age}, #{ item.password})
    </foreach>
</insert>

三、foreach批量更新数据
实现foreach批量插入数据有两种种方法,第一种是一条sql语句来批量更新数据,第二种是批量更新的sql。

一条 SQL 批量更新数据
一条sql语句来批量更新所有数据,下面直接看一下在mybatis中通常是怎么写的(去掉mybatis语法就是原生的sql语句了,所有就没单独说sql是怎么写的)
对应的SQL 映射文件如下:

<update id="updateBatch" parameterType="java.util.List">
    update Student set  username=
    <foreach collection="list" item="item" index="index" separator=" " open="case ID" close="end">
        when #{ item.id} then #{ item.username}
    </foreach>
    where id in
    <foreach collection="list" index="index" item="item" separator="," open="(" close=")">
        #{ item.id,jdbcType=BIGINT}
    </foreach>
</update>
<------------------------------------分隔符-------------------------------->
 <update id="updateBatch"  parameterType="java.util.List">  
    <foreach collection="list" item="item" index="index" open="" close="" separator=";">
        update Student
        <set>
            username=${ item.username}
        </set>
        where id = ${ item.id}
    </foreach>      
</update>

四、foreach批量删除数据
所对应的SQL映射文件如下:

<delete id="delAssetstype" parameterType="java.util.List">
       DELETE FROM WHERE id in
       <foreach collection="list" item="item" open="(" close=")" separator=",">
           #{ item}
       </foreach>
   </delete>

对应的Mapper接口代码如下:

public void deleteAssetstype(List<Integer> ids);

相关文章:

【mybatis】mapper.xml中foreach的用法,含批量查询、插入、修改、删除方法的使用

一、xml文件中foreach的主要属性 foreach元素的属性主要有 collection&#xff0c;item&#xff0c;index&#xff0c;separator&#xff0c;open&#xff0c;close。 collection: 表示集合&#xff0c;数据源 item &#xff1a;表示集合中的每一个元素 index &#xff1a;用于…...

c#扩展方法的使用

扩展方法可以向现有类型“添加”方法&#xff0c;无需创建新的派生类型、重新编译或以其他方式修改原始类型&#xff0c;用起来很方便&#xff0c;下面是我写的例子&#xff0c;为string这个常用的类型添加一个showmes方法&#xff0c;以下是扩展方法的代码&#xff1a; public…...

rhel 8.7 部署 keepalived+haproxy 实现 mysql 双主高可用场景

文章目录 [toc]部署 mysql关闭防火墙关闭 selinux创建相关目录创建 mysql 用户配置 PATH 变量验证 mysql 命令切换到 mysql 用户在 172.72.0.116 生成配置文件在 172.72.0.137 生成配置文件mysql 初始化启动 mysql 服务修改 mysql 的 root 用户密码配置主从关系172.72.0.137 配…...

常见指令以及权限理解

常见指令以及权限理解 命令格式&#xff1a; command [-options] parameter1 parameter1 命令 选项 参数1 参数2 1.command为命令名称&#xff0c;例如变化目录的cd等 2.中括号[ ]实际在命令中是不存在的&#xff0c;这个中括号代表可选&#xff0c;通常选项前面会添加一个符号…...

OpenCV基础知识(6)— 滤波器

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。在尽量保留原图像信息的情况下&#xff0c;去除图像内噪声、降低细节层次信息等一系列过程&#xff0c;被叫做图像的平滑处理&#xff08;或者叫图像的模糊处理&#xff09;。实现平滑处理最常用的工具就是滤波器。通过调节…...

IOC容器的基础功能设计模式

构造模式 构造器的目的和构造函数一样&#xff0c;但是构造器可以提供丰富的api来简化对象的构造 构造模式用于简化被构造对象的创建&#xff0c;通过提供一大堆的api来丰富简化构造过程&#xff0c;增加调用者的体验。 构造者需要提供一个Build方法用于构建和返回将要构造的…...

FFmpeg参数说明FFmpegAndroid饺子视频播放器

FFmpegAndroid https://github.com/xufuji456/FFmpegAndroid https://github.com/lipangit/JiaoZiVideoPlayer/tree/develop 饺子视频播放器 ffmpeg 不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件 http://www.360doc.com/content/21/0204/15/54508727_9606…...

DNS入门学习:DNS解析生效问题(中科三方)

在修改域名解析记录或DNS服务器之后&#xff0c;DNS解析并不会立即生效&#xff0c;这给很多网站管理者带来了很多困扰&#xff0c;了解DNS解析生效原理以及不同情况下DNS解析生效时间&#xff0c;对于网站管理工作有很大帮助。本文中科三方针对不同情况下DNS解析生效时间做下简…...

Ubuntu22.04编译安装Mysql5.7.35

新升级的ubuntu22.04版本&#xff0c;该版本默认openssl已经升级到3.0&#xff0c;所以编译过程遇到一些问题记录一下。 编译步骤&#xff1a; 安装依赖 gcc g已经安装过就不需要再安装了。 apt-get install cmake apt-get install libaio-dev apt-get install libncurses5…...

C++音乐播放系统

C音乐播放系统 音乐的好处c发出声音乐谱与赫兹对照把歌打到c上 学习c的同学们都知道&#xff0c;c是一个一本正经的编程语言&#xff0c;因该没有人用它来做游戏、做病毒、做…做…做音乐播放系统吧&#xff01;&#xff01; 音乐的好处 提升情绪&#xff1a;音乐能够影响我们…...

Django笔记之log日志记录详解

以下是一个简单的 logging 模块示例&#xff0c;可以先预览一下&#xff0c;接下来会详细介绍各个模块的具体功能&#xff1a; LOGGING {version: 1,disable_existing_loggers: False,formatters: {verbose: {format: %(levelname)s %(message)s,}},handlers: {file_1: {leve…...

vue局部打印多页面pdf

技术背景 html打印程pdf,使用的官方提供的window.print()打印的样式 media print {} 方法一 const printContent this.$refs.bodyright;var textInput printContent.getElementsByTagName("input");for (var i 0; i < textInput.length; i) {textInput[i].se…...

指定或降低Rust 工具链的版本

要更改 Rust 工具链的版本&#xff0c;您可以使用以下命令之一&#xff1a; rustup default stable&#xff1a;使用 stable 版本的 Rust 工具链作为默认版本。rustup default beta&#xff1a;使用 beta 版本的 Rust 工具链作为默认版本。rustup default nightly&#xff1a;使…...

数据驱动成功:商城小程序分析与改进

在当今数字化时代&#xff0c;商城小程序成为了企业与消费者之间互动的重要途径。然而&#xff0c;一个成功的商城小程序不仅仅是一个购物平台&#xff0c;更需要通过数据分析不断进行改进和优化&#xff0c;以提升用户体验和营销效果。本文将深入探讨如何利用数据驱动的方式进…...

基于GUI的卷积神经网络和长短期神经网络的语音识别系统,卷积神经网的原理,长短期神经网络的原理

目录 背影 卷积神经网络CNN的原理 卷积神经网络CNN的定义 卷积神经网络CNN的神经元 卷积神经网络CNN的激活函数 卷积神经网络CNN的传递函数 长短期神经网络的原理 基于GUI的卷积神经网络和长短期神经网络的语音识别系统 代码下载链接:基于MATLABGUI编程的卷积神经网络和长短期…...

Docker环境安装elasticsearch和kibana

一、安装elasticsearch 创建es-network&#xff0c;让es、kibana在同一个网段&#xff1a; docker network create --driverbridge --subnet192.168.1.10/24 es-network运行elasticsearch docker run -d \ --name elasticsearch \ # 容器名 --hostname elasticsearch # 主机…...

【剖析STL】vector

vector的介绍及使用 1.1 vector的介绍 cplusplus.com/reference/vector/vector/ vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是…...

Redis、Memcache和MongoDB的区别

>>Memcached Memcached的优点&#xff1a; Memcached可以利用多核优势&#xff0c;单实例吞吐量极高&#xff0c;可以达到几十万QPS&#xff08;取决于key、value的字节大小以及服务器硬件性能&#xff0c;日常环境中QPS高峰大约在4-6w左右&#xff09;。适用于最大程度…...

2023中大ACM游记

游记 中午快十二点时才到了广州六中&#xff0c;在附近吃了塔斯汀汉堡&#xff0c;味道还不错。 十二点半才卡点到了考场&#xff0c;本以为来晚了&#xff0c;但老师说比赛时间延迟&#xff0c;十二点五十才开场。 三个人用一台电脑&#xff0c;这种比赛方式还是第一次遇到…...

记一次线上OOM事故

OOM 问题 linux内核有个机制叫OOM killer(Out-Of-Memory killer)&#xff0c;当系统需要申请内存却申请不到时&#xff0c;OOM killer会检查当前进程中占用内存最大者&#xff0c;将其杀掉&#xff0c;腾出内存保障系统正常运行。 一般而言&#xff0c;一个应用的内存逐渐增加&…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

若依登录用户名和密码加密

/*** 获取公钥&#xff1a;前端用来密码加密* return*/GetMapping("/getPublicKey")public RSAUtil.RSAKeyPair getPublicKey() {return RSAUtil.rsaKeyPair();}新建RSAUti.Java package com.ruoyi.common.utils;import org.apache.commons.codec.binary.Base64; im…...