Mybatis使用IN语句查询

2023-11-10

一、简介

 

在SQL语法中如果我们想使用in的话直接可以像如下一样使用:

select * from HealthCoupon where useType in ( '4' , '3' )

但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错:

 

    Map<String, Object> selectByUserId(@Param("useType") String useType)
	
    <select id="selectByUserId" resultMap="BaseResultMap" parameterType="java.lang.String">
		select * from HealthCoupon where useType in (#{useType,jdbcType=VARCHAR})
    </select>

 

其中useType="2,3";这样的写法,看似很简单,但是MyBatis不支持这样操作,可以用$进行替换,如下方式即可运行

 

    Map<String, Object> selectByUserId(@Param("useType") String useType)
	
    <select id="selectByUserId" resultMap="BaseResultMap" parameterType="java.lang.String">
		select * from HealthCoupon where useType in (${useType,jdbcType=VARCHAR})
    </select>

 

#方式能够很大程度防止sql注入,$方式无法防止sql注入,所以还是推荐使用#方式,参考以下三种方式。

 

MyBatis中提供了foreach语句实现IN查询,foreach语法如下:

 

foreach语句中, collection属性的参数类型可以使:List、数组、map集合
​     collection: 必须跟mapper.java中@Param标签指定的元素名一样
​     item: 表示在迭代过程中每一个元素的别名,可以随便起名,但是必须跟元素中的#{}里面的名称一样。
   index:表示在迭代过程中每次迭代到的位置(下标)
   open:前缀, sql语句中集合都必须用小括号()括起来
​     close:后缀
   separator:分隔符,表示迭代时每个元素之间以什么分隔

正确的写法有以下几种写法:

 

(一)、selectByIdSet(List idList)

 

如果参数的类型是List, 则在使用时,collection属性要必须指定为 list

 

List<User> selectByIdSet(List idList);

<select id="selectByIdSet" resultMap="BaseResultMap">
	SELECT
	<include refid="Base_Column_List" />
	from t_user
	WHERE id IN
	<foreach collection="list" item="id" index="index" open="(" close=")" separator=",">
	  #{id}
	</foreach>
</select>


(二)、List<User> selectByIdSet(String[] idList)

 

如果参数的类型是Array,则在使用时,collection属性要必须指定为 array

List<User> selectByIdSet(String[] idList);

<select id="selectByIdSet" resultMap="BaseResultMap">
	SELECT
	<include refid="Base_Column_List" />
	from t_user
	WHERE id IN
	<foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
	  #{id}
	</foreach>
</select>


(三)、参数有多个时

 

当查询的参数有多个时,有两种方式可以实现,一种是使用@Param("xxx")进行参数绑定,另一种可以通过Map来传参数。

 

3.1 @Param("xxx")方式

List<User> selectByIdSet(@Param("name")String name, @Param("ids")String[] idList);

<select id="selectByIdSet" resultMap="BaseResultMap">
	SELECT
	<include refid="Base_Column_List" />
	from t_user
	WHERE  name=#{name,jdbcType=VARCHAR} and id IN
	<foreach collection="ids" item="id" index="index"
			 open="(" close=")" separator=",">
	  #{id}
	</foreach>
</select>

 

3.2 Map方式

Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("idList", ids);
mapper.selectByIdSet(params);

<select id="selectByIdSet" resultMap="BaseResultMap">  
     select  
     <include refid="Base_Column_List" />  
     from t_user where 
     name = #{name}
     and ID in  
     <foreach item="item" index="index" collection="idList" open="(" separator="," close=")">  
      #{item}  
     </foreach>  
</select>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis使用IN语句查询 的相关文章

  • JCombobox 字符串项(可见)和整数键(固有)

    我有一个数据库模式 它将作为 JTable 列显示在 JCombobox 中以选择名称 但我希望将 ID 字段插入 作为外键 到另一个表中 通常 在下拉列表中选择一个项目 将所选项目带到组合框的显示区域 我想要做的是 当选择组合框中的任何项
  • Laravel 总结雄辩集

    如何对已预先加载的数据集求和 这是我的表结构 regions table Field Type Null Key Default Extra id int 10 unsigned NO PRI NULL
  • 将 Java 3D 坐标转换为 2D 屏幕坐标

    我正在使用一个名为 Walrus 的 Java 3D 应用程序 该应用程序用于显示有向图 该代码已经具有突出显示节点并在给定其屏幕坐标的情况下在图形中相邻绘制标签的功能 旋转屏幕后 该节点不再突出显示 我所拥有的是 3D 中的节点坐标 我需
  • Java Sound可以用来控制系统音量吗?

    Java 声音优惠FloatControl各种声音线路功能的实例 以及MASTER GAIN http docs oracle com javase 7 docs api javax sound sampled FloatControl T
  • IDEA:javac:源版本1.7需要目标版本1.7

    使用 IntelliJ IDEA 运行 JUnit 测试时 我得到 我该如何纠正这个问题 使用SDK 1 7 模块语言级别为1 7 Maven 构建工作正常 这就是为什么我相信IDEA配置问题 您很可能在此处从 Maven 导入了不正确的编
  • 从多个地方绘制 JPanel

    我目前正在为学校开发一款 Java 2D 游戏 我们必须使用抽象工厂设计模式 对于 2D 实现 我使用工厂如下 public class Java2DFact extends AbstractFactory public Display d
  • HYBRIS - 组件和插槽如何在 JSP 文件中工作?

    最近我正在使用 Hybris 我无法理解这些组件是如何工作的 我知道如何创建和定义一个 如何将它们添加到我想要的页面等 但我不明白如何使用该标签
  • MYSQL从另一个表插入id

    我有以下疑问 我有 2 张桌子 id customers 1 alan 2 beth 3 john and id id customers value 1 1 bar 2 1 foo 3 2 baz 示例 我需要在第二个表中添加值 alfa
  • 如何将空字符串序列化为单个空标签?

    我使用 Simple XML 框架序列化此类 Root public class HowToRenderEmptyTag Element required false private String nullString 我想得到
  • MySQL select with 语句

    我正在学习更多 SQL 并遇到了一个 问题 我有两个表 如下面的链接http www sqlfiddle com 2 403d4 1 http www sqlfiddle com 2 403d4 1 编辑 由于我这个周末所做的所有 SQL
  • 码头无故停止

    我需要经验丰富的码头用户的建议 我在负载均衡器 亚马逊云 后面维护着 2 台 Linux 机器 使用 Jetty 9 0 3 有时我的 Jetty 容器会被 Thread 2 无故关闭 同时地 显示以下日志并且容器无故停止 没有错误 没有例
  • Bool类型返回规则

    我使用 dapper ORM 所以我使用两个规则Query
  • Mysql 更快的 INSERT

    好的 我有大约 175k 个 INSERT 语句 相当大的 INSERT 语句 例如 INSERT INTO gast ID Identiteitskaartnummer Naam Voornaam Adres Postcode Stad
  • JList 类型不采用参数类型

    当我尝试编译一些代码时 我不断收到这些错误 CCC java 21 type javax swing JList does not take parameters JList
  • JS 中的 .Jar 文件

    有谁知道如何在 JS 中访问 jar 文件 我已经用 Java 创建了类并作为 jar 文件导入 我想从 JS 文件访问该类 大家好 我感谢你们所有人 我尝试在 Firefox XUL 中使用 JS 列出文件夹中的文件 但我做不到 然后我决
  • 在 Struts 2 中使用单个文件标签上传多个文件

    我想使用单个 Struts 2 文件标签上传多个文件 就像在 Gmail 中一样 我们使用 CTRL 键来选择多个文件来附加多个文件 我知道如何上传多个文件 但我想使用单个文件标签 我在一个小画廊应用程序中上传多个文件 如果您的操作已设置为
  • 从 Brixton.RC1 开始的 ZuulProxy 未传递授权标头

    从 Spring Cloud 切换时Brixton M5 to Brixton RC1我的 ZuulProxy 不再通过Authorization标头下游到我的代理服务 我的设置中有各种各样的角色 但大多数都相当简单 Authorizati
  • WHERE 子句中的可选参数[重复]

    这个问题在这里已经有答案了 假设有一个具有 3 个参数的存储过程 在所有可能性中 我希望通过一个单一的方法来实现这一目标WHERE子句不会失去对 using 的控制 AND OR 太多了 Example Params CITY VARCHA
  • 根据同一 select 语句中先前计算的行(或列)计算新行(或列)

    我正在尝试根据年度销售增长预期来计算年度预期销售量 在一张表中 我有实际销量 create table Sales ProductId int Year int GrowthRate float insert into Sales valu
  • Swing:如何创建事件并将其分派给组件?

    我需要将一些事件发送到 Swing 中的组件 因此它的处理方式就像任何用户生成的标准 Swing 事件一样 基本上 类似于宏记录器 然后是 JEditorPane 的执行器 但我需要对生成的事件有更多的控制 所以 假设我有一个编辑 我想 捕

随机推荐

  • ECCV 2020《Linguistic Structure Guided Context Modeling for Referring Image Segmentation》论文笔记

    目录 简介 动机 贡献 方法 实验 简介 本文出自北航刘偲老师colab 使用语言结构引导上下文建模 用于Referring Image Segmentation 下载链接 动机 解决Referring Image Segmentation
  • docker-compose 运行hadoop

    参考网址 https github com big data europe docker hadoop 下载hadoop镜像 可以在github上自己手动构建hadoop镜像 也可以从dockerhup上下载 dockerhup上已经与该g
  • C语言注释风格(函数、功能、输入、输出、返回)

    C语言编程规范 注释 规则 1 一般情况下 源程序有效注释量必须在20 以上 说明 注释的原则是有助于对程序的阅读理解 在该加的地方都加了 注释不宜太多也不能太少 注释语言必须准确 易懂 简洁 2 说明性文件 如头文件 h文件 inc文件
  • yolov5 FPN 与 PAN的结构与作用

    在卷积神经网络过程中 网络层数越深 目标的特征信息就越强 模型对目标的预测就更好 但同时也会使得目标的位置信息越来越弱 并且在不断的卷积过程中 对小目标的信息容易造成损失 因此 需要进行不同尺度的预测 YOLOv5 采用 FPN 和 PAN
  • adamax参数_Adamax优化器

    Adamax是Adam的一种变体 此方法对学习率的上限提供了一个更简单的范围 更多详细的基本内容 请参照词条Adam 在Adam中 单个权重的更新规则是将其梯度与当前和过去梯度的L 2范数 标量 成反比例缩放 而作者又将基于L 2范数的更新
  • Linux提权备忘录

    如果不是因为真的喜欢你 我纠缠你干嘛 我又何必那么卑微 那么不堪 甚至不停修改自己的底线 到最后变得一文不值 网易云热评 一 判断是否为虚拟机 cat proc scsi scsi dmesg grep i vir w who 查询目前登录
  • Webpack5资源配置(三)

    总述 wepack资源配置了四类资源加载除了js以外的配置资源 分别为asset recource资源 asset inline资源 asset source资源 asset通用资源类型 接下来 将配合前期webpack学习 系统的对以上四
  • MEMCACHE未授权访问漏洞利用及修复

    memcache是国外社区网站Live Journal的开发团队开发的高性能的分布式内存缓存服务器 一般的使用目的是 通过缓存数据库查询结果 减少数据库访问次数 以提高动态Web应用的速度 提高扩展性 memcache的默认端口是11211
  • LeeCode精选100题-【两数相加】-1

    这里写自定义目录标题 题干 思路 1 暴力枚举 这种没啥好说的 直接双层循环就可以 时间复杂度为O n 2 空间复杂度为O n 2 借助HashMap 两数想相加 题干 给定一个整数数组 nums 和一个整数目标值 target 请你在该数
  • Nginx 各种反向代理方式

    Nginx 反向代理 代理 http 实现负载均衡 nginx 代理 https nginx 代理tcp nginx 平滑升级 代理 http 本次实验后端为 geoserver 如下就可以实现基础的http反向代理 server list
  • 刷脸支付是一套完整解决商户方案的大数据

    支付宝刷脸支付服务还可以使用微信刷你的脸 支付宝刷脸支付服务接受第三方支付 因此它了面部识别支付的权利和产品的开发 对于用户来说 脸刷支付不但是一种收集功能 而且是一套完整解决方案的大数据 支付宝刷脸支付服务商不但解决了现金收集的问题 而且
  • Fiddler抓取HTTP请求详解

    Fiddler抓取HTTP请求 抓包是Fiddler的最基本的应用 以本博客为例 启动Fiddler之后 在浏览器中输入http baidu com 键入回车之后 在Fiddler的web session界面捕获到的HTTP请求如下图所示
  • ES6 迭代器Iterator

    Iterator是一种新的遍历机制 两个核心 1 迭代器是一个接口 能快捷的访问数据 通过Symbol iterator来创建迭代器 通过迭代器的next 方法 获取数据 2 迭代器是用于遍历数据结构的指针 类似于数据库的游标 const
  • Tomcat运行startup一闪而过

    右击startup bat选择用记事本打开 在最后加一个PAUSE 这样可以暂停住窗口 end PAUSE 一般是因为没有配置JAVA HOME这个环境变量导致的 只需要在系统环境变量里新加一个JAVA HOME 变量值填你的jdk安装路径
  • 计组

    目录 一 知识点 二 习题 参考文献 一 知识点 不同机器有不同的指令系统从计算机指令系统设计角度 可将计算机分为复杂指令系统计算机CISC Complex InstrucTIon Set Computer 和精简指令系统计算机RISC R
  • 匿名内部类

    关于匿名内部类还有如下两条规则 1 匿名内部类不能是抽象类 因为系统在创建匿名内部类的时候 会立即创建内部类的对象 因此不允许将匿名内部类 定义成抽象类 2 匿名内部类不等定义构造器 因为匿名内部类没有类名 所以无法定义构造器 但匿名内部类
  • java正则表达式匹配所有数字,包括带小数点的数字

    用于匹配的正则表达式为 1 9 d d 0 d 1 9 1 9 匹配1 9的数字 d 匹配数字 包括0 9 紧跟在 d 之后 表明可以匹配零个及多个数字 匹配小数点 紧跟在 之后 表明可以匹配零个或一个小数点 0 匹配一个数字0 其中的 1
  • 百度网盘提取码_百度网盘提取码查询工具,老菜建议大家收藏备用!

    APP菜园 打造属于我们自己的APP帝国 1 打开支付宝app 首页搜索 8221050 然后点击快捷功能 天天领红包 2 软件领取流程 1 认真阅读下软件介绍 2 找到图片下方的 获取链接 复制 3 打开手机上的浏览器粘贴链接搜索 百度云
  • Unity学习笔记(一)结构体的简单理解与应用

    Unity中的结构体的简介与使用 一 Unity中的结构体是什么 二 结构体与类的不同 一 Unity中的结构体是什么 简单来说 在 C 中 结构体是值类型数据结构 它使得一个单一变量可以存储各种数据类型的相关数据 例如我定义了一个结构体
  • Mybatis使用IN语句查询

    一 简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用 select from HealthCoupon where useType in 4 3 但是如果在MyBatis中的使用in的话 像如下去做的话 肯定会报错 Map