Mybatis使用IN语句查询的实现

 更新时间:2020年12月28日 10:33:26   作者:lfendo  
这篇文章主要介绍了Mybatis使用IN语句查询的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、简介

在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不支持。。但是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="idList" 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>

到此这篇关于Mybatis使用IN语句查询的实现的文章就介绍到这了,更多相关Mybatis IN语句查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring中的事务隔离级别的介绍

    Spring中的事务隔离级别的介绍

    今天小编就为大家分享一篇关于Spring中的事务隔离级别的介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Spring中IOC和AOP的核心组成架构详解

    Spring中IOC和AOP的核心组成架构详解

    这篇文章主要介绍了Spring中IOC和AOP的核心组成架构详解,本文是对Spring的2大核心功能——IoC和AOP 的总结提炼,并增加了环境profile和条件化bean的内容,篇幅较短,更像是一个大纲,或者思维导图,需要的朋友可以参考下
    2023-08-08
  • java求100之内的素数(质数)简单示例

    java求100之内的素数(质数)简单示例

    这篇文章主要介绍了java求100之内的素数简单示例,素数是一个大于1的自然数,如果除了1和它自身外,不能被其他自然数整除的数;否则称为合数
    2014-04-04
  • java注解处理器学习在编译期修改语法树教程

    java注解处理器学习在编译期修改语法树教程

    这篇文章主要为大家介绍了java注解处理器学习在编译期修改语法树教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • 详解Java 集合系列(三)—— LinkedList

    详解Java 集合系列(三)—— LinkedList

    这篇文章主要介绍了Java 集合系列(三)—— LinkedList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • mybatis实现图书管理系统

    mybatis实现图书管理系统

    这篇文章主要为大家详细介绍了mybatis实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-06-06
  • 浅谈导入JavaWeb 项目出现的问题

    浅谈导入JavaWeb 项目出现的问题

    这篇文章主要介绍了导入JavaWeb 项目出现的问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • spring自定义注解实现拦截器的实现方法

    spring自定义注解实现拦截器的实现方法

    本篇文章主要介绍了spring自定义注解实现拦截器的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Java中新建一个文件、目录及路径操作实例

    Java中新建一个文件、目录及路径操作实例

    这篇文章主要给大家介绍了关于Java中新建一个文件、目录及路径操作的相关资料,新建文件、目录及路径是我们日常开发中经常会遇到的一个需求,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-12-12
  • java如何获取用户登录ip、浏览器信息、SessionId

    java如何获取用户登录ip、浏览器信息、SessionId

    这篇文章主要介绍了java如何获取用户登录ip、浏览器信息、SessionId,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论