【Mybatis】中使用IN语句查询sql的方法

【Mybatis,SQL查询语句报错及解决方法】Exception in thread “main“ org.mybatis.spring. Spring整合Mybatis框架,前台的登陆方法,调用SQL查询语句报错。加上无参构造器后,前台可以正常调用UserMapper接口的登录方法了! 阅读详情

一、语法简介

  1. 在MySQL中 使用SQL IN 操作符 语法:

    SELECT column_name(s)
    FROM table_name
    WHERE column_name IN (value1,value2,...)
    
  2. 但是如果在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>
    
  3. 因为MyBatis不支持如上写法,但是MyBatis中提供了foreach语句实现IN查询,foreach语法如下:

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

二、代码案例

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

List<User> selectByIdSet(List<String> 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>

2.如果参数的类型是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>

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

  • @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="idList" item="id" index="index"
			 open="(" close=")" separator=",">
	  #{id}
	</foreach>
</select>
  • 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>
MyBatis 接口与 SQL 语句绑定的 4 种方式,你会几种? 通过以上四种方式,你可以轻松地将 MyBatis 接口与 SQL 语句绑定。XML 映射文件配置:适合复杂的 SQL 语句,配置灵活,但维护成本较高。注解绑定:代码简洁,适合简单的 SQL 语句,但不适合复杂的动态 SQL。Provider 类方式:支持动态生成 SQL 语句,灵活性高,但增加了代码复杂度。自动扫描包下所有映射器:简化配置,适合项目中 Mapper 接口较多的情况。 阅读详情

相关推荐

Vivado IP核综合失败别慌:除了打补丁,这个TCL命令也能救急(以Video Frame Buffer为例)

本文详细解析了Vivado IP核综合失败的排查方法,特别是针对Video Frame Buffer Read IP的常见问题。从补丁安装到深入分析DCP文件生成机制,再到使用强大的TCL命令`foreach ip_in_proj [get_ips] {compile_c [get_ips $ip_in_proj]}`强制重编译,提供了一套完整的解决方案。帮助开发者快速定位并解决IP核综合失败问题,确保项目顺利进行。

weixin_30892889的博客 424

Java:MyBatis如何实现SQL中的in查询

在MySQL中使用in查询。

彭世瑜的博客 2094

如何使用AKShare作为OpenBB的数据源

`openbb_akshare`项目是 OpenBB 的数据源扩展。可以用于查询A股和港股数据

FinAnalyzer金融分析工具 3196

Mybatis中sql拼接in查询

MyBatis数据库sql语句中in一个动态数组 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separat...

探索丶挑战丶突破 1万+

Cadence Virtuoso里搞定斩波运放AC仿真:PSS+PAC保姆级设置避坑指南

然而,当工程师们尝试在Cadence Virtuoso环境中对这种特殊结构进行AC特性分析时,往往会遇到传统AC仿真方法失效的困境——这正是PSS(Periodic Steady-State)与PAC(Periodic AC)仿真组合大显身手的场景。实际项目中我们常采用"先快后精"的两步法:先用快速设置确认大体趋势,再针对关键频段进行精细仿真。例如某次设计迭代中,将harmonics从10增加到20后,发现在1MHz处的相位裕度估算误差达15°,这解释了之前样机测试时的振荡问题。

weixin_33508411的博客 451

前导0预测(Leading-Zero Anticipator,LZA)

前导0预测(Leading-Zero Anticipator,LZA) 浮点加法在完成之后会进行尾数规格化移位,而在进行尾数加法时,可以使用前导0预测(Leading-Zero Anticipator,LZA)同时计算移位,前导0预测只发生在一个正数加上一个负数的情况下,电路图如图1所示。 图1 传统LZD算法和LZA算法 1. 基础算法 算法的目标是计算出加法结果序列左边连续0的数量,下文中对...

crw1111111的博客 7379

Mybatis动态sql语句 in语句 where标签 if标签 trim标签 set标签 foreach标签 choose when标签

collection表示集合赋值传参名字deptIds,不用加#{}item表示给内部数据取名open表示语句开始前的输入close表示语句结束时的输入separator表示每个item之间使用某个符号隔开。

m0_53773432的博客 3226

CMake入门教程【基础篇】在Windows、Linux上安装CMake

CMake如何下载与安装

小鱼酱的博客 2727

MyBatis实现In查询

文章目录一. SQL语法实现In查询二. MyBatis实现In查询1. Dao层方法的参数只有一个2. Dao层方法的参数有多个2.1 使用@Param("xxx")实现2.2 使用Map实现参考资料 一. SQL语法实现In查询 SQL语句实现In查询 SELECT * FROM user_info WHERE user_name in ('xixi','haha'); 二. MyB...

zijikanwa 2万+

大数据领域数据产品的交通运输行业应用

您是否经历过早高峰被堵在桥上,看着导航显示“前方5公里缓行”却无能为力?是否见过货车司机绕远路导致成本飙升?这些“交通痛点”的背后,是传统交通管理依赖经验决策的局限。本文将聚焦“大数据数据产品”这一核心工具,从技术原理到实际应用,全面解析它如何为交通运输行业“开天眼”,解决从城市拥堵到物流效率的一系列难题。本文将按照“问题引入→概念拆解→技术原理→实战案例→应用场景→未来趋势”的逻辑展开,用生活化比喻降低理解门槛,用代码和数学模型提升专业性,最终帮您建立“大数据+交通”的完整认知框架。交通数据。

操作系统内核探秘的博客 237

ArcGIS Pro 制作这种地图海报

ArcMap 版本与 ArcGIS Pro 版本的制图功能相差太多,无论从美观上还是制图效率都远远优于 ArcMap,用了一段时间的 ArcGIS Pro ,真心推荐有条件的大家赶紧试一试!一个软件也能搞定一张不错的海报哦!----吐槽:好的设计真的是门花时间的活,这个教程大概花了我7小时左右,我都忘了我自己教程中截图多少张了!(可能是我速度太慢了)测试数据:阿里云盘分享-----北极海冰数据.https://www.aliyundrive.com/s/SUhsnqfkmXh。

J_Giser的博客 1429

Mybatis使用IN语句查询

一、简介在SQL语法中如果我们想使用in的话直接可以像如下一样使用:select * from HealthCoupon where useType in ( '4' , '3' )但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map&lt;String, Object&gt; selectByUserId(@Param("useType") String useT...

fendo 37万+

acados安装与调试指南:版本兼容性问题

在计算机编程领域,软件工具和库的安装与调试是每个开发者必经的挑战。最近,在安装和使用acados库时,我遇到了一个有趣的问题,这里我将详细分享我的经验和解决方案。

m0_62153576的博客 740

LambdaQueryWrapper的insql方法的使用

insql()方法用于在SQL语句中使用IN子句,即查询某个列的值是否包含在一组给定的值中。LambdaQueryWrapper是MyBatis-Plus框架中的一个查询构造器类。insql()方法是该类提供的一个方法之一。

疯一样的男子的博客 7160

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

mybatis 多字段in_mybatis框架下select带in批量查询,返回结果集无序问题

引言在实际项目中有的时候会多次连接数据库查询,有的时候会带上in的语句,在二次查询的时候返回的数据集就是没有顺序的。比如我们在微博平台上搜索某个用户,为了搜索速度够快,在els那边一般只存user的id和username。当根据username匹配到用户,获取到id后,还会在本地的数据库中根据id去查询用户更多的信息,比如sex,signature等字段。在第一次查询的时候是按照username匹...

weixin_39638188的博客 1578

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

在 MyBatis-Plus 中使用 IN 语法

在 MyBatis-Plus 中使用 `IN` 语法可以通过多种方式实现。首先,可以使用 `QueryWrapper` 或 `LambdaQueryWrapper` 的 `in` 方法动态构建查询条件,适合在 Java 代码中直接操作。其次,可以在 XML 映射文件中编写 SQL 语句,使用 `` 标签处理 `IN` 查询,适合复杂 SQL 场景。此外,注解方式也可用于编写 `IN` 查询,但需手动处理列表转换。需要注意的是,当传入的列表为空时,可能导致 SQL 语法错误,因此应提前检查列表是否为空。根据需

Xx47585874的博客 6548

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

mybatis中的mapper.xml中如何使用in方法

提示:mapper.xml中如何使用in方法一般都是like或=

m0_67394360的博客 7300

[Java基础 持久层Mybatis] Mybatis使用IN语句查询

一、简介 在SQL语法中如果我们想使用in的话直接可以像如下一样使用: select * from HealthCoupon where useType in ( '4' , '3' ) 但是如果在MyBatis中的使用in的话,像如下去做的话,肯定会报错: Map<String, Object> selectByUserId(@Param("useType") String useType) select * from HealthCoupon where useType in (#{

汤圆的博客 586

【Mybatis-----】[实战编码]----Mybatis - 使用IN语句查询-详细说明

本文介绍了SQL和MyBatis实现In查询的方法。SQL中直接使用IN关键字即可实现In查询。MyBatis主要通过foreach标签实现,其中: 单参数时:List类型参数使用collection="list",数组参数使用collection="array" 多参数时:可通过@Param注解绑定参数名、Map传参或对象传参三种方式 foreach标签包含collection、item、index、open、close、separator等属性,用于构建动态SQL

朱朱博客,分享技术 759

【Mybatis】- 使用IN语句查询-详细说明

本文介绍了SQL及MyBatis中实现IN查询的方法。SQL中直接使用IN关键字即可实现,而MyBatis则通过foreach标签实现IN查询,支持List、数组、Map等多种参数类型。文章详细说明了不同参数场景下的实现方式:当Dao层方法参数为单个List或数组时,collection需分别设为"list"或"array";当有多个参数时,可通过@Param注解、Map传参或对象传参三种方式实现。文中提供了完整的代码示例,包括接口定义和Mapper映射文件配置,展示

朱朱博客,分享技术 418

大表sql in查询优化

问题描述: 项目开发中由于数据量非常大(和某些表设计的不太合理),导致权限比较高的账号进行查询数据的时候SQL语句 in (....)的字段(id/relatedid)比较多,导致SQL查询效率比较慢,耗时较高 原因分析: 由于业务需要,只能通过优化mysql查询的方式来处理。1,修改mysql源码(暂不支持,人力物力对于小公司消耗较大)2,通过在查询语句开始前新建临时表的方式来优化in查询语句 select * from table where relatedID in (id1,id2....

C_ptx的博客 1895

MySQL如何对SQL做prepare预处理(解决IN查询SQL预处理仅能查询出一条记录的问题)

1、SQL预处理prepare的由来? 2、SQL预处理prepare如何使用? 3、解决SQL预处理prepare对in查询无效的问题

健身变秃,coding变强 3606

【mybatis】Mybatis中SQL使用in查询List或数组

1.mybatis in 查询List时 List<String> list=new ArrayList<String>(); ...;//向list中填装参数值 //list为必传参数集时,判断如果该list为空,没有参数值,则填装一个-1或其他保证该表不会查询出的参数值; //如果list为非必传参数集时,则下面if判断可以省去; if(list.size()...

hucbmz的博客 1448
上一篇: Java中实现多级菜单的列表(递归排序)
下一篇: 【POI】的导入与导出功能
Monika、
博客等级 码龄7年 16粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monika、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值