mybatis foreach标签的使用详解
作者:wt_better 发布时间:2023-05-07 21:12:09
标签:mybatis,foreach标签
mybatis的foreach标签经常用于遍历集合,构建in条件语句或者批量操作语句。
下面是foreach标签的各个属性
假设接口中传递的list如下所示:
List<String> list = new ArrayList<>();
list.add("zhangsan");
list.add("lisi");
list.add("wangwu");
其中foreach标签配置如下:
<foreach collection="list" item="item" separator=",">
(#{item})
</foreach>
可以看到的是foreach标签指定了逗号作为分隔符,那么mybatis将会解析出foreach标签里面的内容作为一个整体然后再其后面拼接上逗号分隔符,拼接后的过程如下所示:
('zhangsan') //第一步,迭代集合,获取对应的item,和外部的(),拼接形成('zhangsan')
('zhangsan'), //第二步,在之前的基础上拼接上逗号分隔符
('zhangsan'),('lisi') //第三步,继续迭代
('zhangsan'),('lisi'), //第四步,拼接逗号分隔符
('zhangsan'),('lisi'),('wangwu') //第五步,迭代集合并拼接,到此迭代结束
最终的结果为
('zhangsan'),('lisi'),('wangwu')
如果在foreach标签前面加上insert into table values,将会变形成
INSERT INTO user(user_name) VALUES('zhangsan'),('lisi'),('wangwu')
1
这种形式一般用于数据库的批量增加。
如果将foreach配置修改如下,指定open属性为左括弧,close属性为右括弧:
<foreach collection="list" item="item" open="(" separator="," close=")">
#{item}
</foreach>
那么拼接的过程如下所示
( //第一步,拼接open指定的开始字符
('zhangsan' //第二步,迭代集合,拼接对应的item
('zhangsan', //第三步,拼接separator指定的分隔符
('zhangsan','lisi' //第四步,迭代集合,拼接对应的item
('zhangsan','lisi', //第五步,拼接separator指定的分隔符
('zhangsan','lisi','wangwu' //第六步,迭代集合,拼接对应的item
('zhangsan','lisi','wangwu') //第七步,拼接close指定的闭合字符
最终结果是:
('zhangsan','lisi','wangwu')
如果在foreach标签前面加上select … from table where … in ,将会变形成
SELECT * FROM user WHERE user_name in ('zhangsan','lisi','wangwu')
这种形式被用来构建in条件语句。
如果collection类型为map,则index代表key,item代表对应的value,可以这样进行批量插入:
其中Role实体类如下:
如果你想了解更多的关于mybaits标签的使用,请移步mybatis trim标签的使用
本文参考mybatis官方文档
来源:https://blog.csdn.net/wt_better/article/details/80941646


猜你喜欢
- 使用可以绑定数据源的控件我们需要有实现了IList接口的类作为数据源,我们有很多的方法,比如使用ArrayList或者List的泛型类都是很
- Android数据共享 sharedPreferences 的使用方法Android 中通过 sharedPreferences 来持久化存
- Zookeeper和Eureka哪个更好?1、CAP理论一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求C:数据一致性
- 一:什么是Bitmap像素级的操作相信大家都知道一张jpg或png放大后会是一个个小格子,称为一个像素(px),而且一个小格子是一种颜色,也
- 一、配置xml路径mybatis-plus:mapper-locations: classpath:mapper/*.xml二、编写Mapp
- 假定存在这样一种情况多个用户对数据库进行写,我们的业务逻辑规定,每个用户只能写一次,大部分用户也只发一次请求。public void wri
- 本文主要实现功能,可能有不合理的地方首先创建一个实现功能的工具里,直接上代码:import android.content.Context;
- 接着上篇java验证码制作(上篇)给大家介绍有关java验证码的相关知识!方法三:用开源组件Jcaptcha实现,与Spring组合使用可产
- MyBatis查询数据赋值给List集合数据缺少今天在使用MyBatis查询数据时,发现查出来的数据和List集合的大小不一致,如下图所示,
- 错误示例,同一个类中使用异步方法:package com.xqnode.learning.controller;import com.fas
- 多数据源创建数据库CREATE DATABASE mybatis_plus_1;USE mybatis_plus_1;CREATE TABL
- 为什么要给图片添加水印为图片添加水印的主要作用是保护图片版权,防止图片被未经授权的人使用或传播。通常情况下,图片水印会包含图片作者的名字、版
- 环境操作系统windows10JDKjdk1.8.0_192IDEEclipse IDE for Enterprise Java Devel
- 内置的连接池目前spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池。 数据库连接可以使
- 类注解@component 标注类,泛指各种组件,类不属于各种分类的时候,用它做标注。@Service 标注类,声明该类为业务层组件,用于处
- 一、概述参照官方demo,基于agora开发,输入会议号(频道)和显示名称 参会,可设置参会选项。支持用户注册和登录。支持多人参会。二、效果
- 摘要: 如何解决页面之间跳转时的黑屏问题呢?在默认情况下,Android应用程序启动时,会有一个黑屏的时期。原因是,首个activity会加
- 本文介绍了eclipse下搭建hibernate5.0环境的步骤,分享给大家,具体如下:hibernate引入的jar包:hibernate
- java中实现list或set转map的方法在开发中我们有时需要将list或set转换为map(比如对象属性中的唯一键作为map的key,对
- 前言真的一秒就可以实现么?是的,因为我们直接复制粘贴工具类拿来用就可以。 工具类 WaterMarkUtil.java&