mybatis 查询sql中in条件用法详解(foreach)

 更新时间:2021年02月03日 17:13:44   作者:ya_ya_tou  
这篇文章主要介绍了mybatis 查询sql中in条件用法详解(foreach),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

foreach属性主要有item,index,collection,open,separator,close

1、item表示集合中每一个元素进行迭代时的别名,

2、index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

3、open表示该语句以什么开始,

4、separator表示在每次进行迭代之间以什么符号作为分隔符,

5、close表示以什么结束,

6、collection属性,该属性是必须指定的,但是在不同情况下,该属性的值是不一样的,

主要有一下3种情况:

a、如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .

b、如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .

c、如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

<select id="findBy" resultMap="RfCustomerMemMap" parameterType="java.util.Map">
  SELECT
  <include refid="Column"/>
  FROM rfl_customer_mem a LEFT JOIN rfl_loan b ON a.member_no = b.loan_member_no
  WHERE a.member_no = #{memberNo} AND b.status IN
  <foreach collection="status" index="index" item="item" open="(" separator="," close=")">
   #{item}
  </foreach>
  <if test="name != null and name != ''">
   AND name = #{name}
  </if>
  <if test="idNumber != null and idNumber != ''">
   AND id_number = #{idNumber}
  </if>
  <if test="mobileNo != null and mobileNo != ''">
   AND mobile_no = #{mobileNo}
  </if>
  <if test="loanNo != null and loanNo != ''">
   AND loan_no = #{loanNo}
  </if>
  order by a.id DESC
  <if test="offset > -1 and rows > -1">
   limit #{offset},#{limit}
  </if>
 </select>

java调用查询sql代码

public List<LoanMerchantMemEntity> findMerchantMemBy(String merchantName, String merchantNo, String socialCreditCode, String loanNo, int offset, int limit) {
  List<LoanMerchantMemEntity> list = new ArrayList<LoanMerchantMemEntity>();
  Map<String, Object> filter = new HashMap<String, Object>(); 
  filter.put("merchantName", merchantName);
  filter.put("socialCreditCode", socialCreditCode);
  filter.put("status", statsList());
  filter.put("loanNo", loanNo);
  filter.put("offset", offset);
  filter.put("limit", limit);
  filter.put("merchantNo", merchantNo);
 
  try {
   List<LoanMerchantMemEntity> row = loanMerchantMemDao.findBy(filter);
  } catch (Exception e) {
   LOGGER.error(filter, "查询企业会员信息异常", e);
  }
  return list;
 }

 static List<String> statsList(){
  List<String> statusList = new ArrayList<String>();
  statusList.add("SUCCESS");
  statusList.add("DUE");
  statusList.add("OVER");
  return statusList;
 }

其中,map中key为status值类型为list,这种使用场景为第三种,即collection为map中的key值

补充:当传入一个String数组后,在sql中使用foreach语句实现IN查询

当我们从前台传递过来的是一个数组是,后台我们要进行处理, 因为在数据库中表的字段类型有可能是num 或者varchar;

我这里传过来的是Map 当然也可以使用request.getparameter("name") 这个name为jsp或者htm页面中的id所对应的name,

下面代码中也是的:

 String name=(String) params.get("name");
 String[] hiddens = name.split(",");
 params.put("name", hiddens); 

当我们经过这一部分的处理后,数据就存入到map中了,传入参数后进行查询

AND 条件 in

<foreach collection="name" index="index" item="item" open="(" separator="," close=")"> 
   #{item} 
  </foreach> 

在sql上面,我们进行查询的时候就OK啦!

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • Java内存模型及其作用详解

    Java内存模型及其作用详解

    在现代计算机系统中,尤其是多处理器架构下,每个处理器都有自己的高速缓存,而主内存(RAM)是所有处理器共享的数据存储区域,这篇文章主要介绍了深入理解Java内存模型及其作用,需要的朋友可以参考下
    2024-04-04
  • SpringBoot+websocket实现消息对话功能

    SpringBoot+websocket实现消息对话功能

    WebSocket是一种在Web应用程序中实现实时双向通信的技术,它可以用于在线游戏、在线聊天、推送通知、实时监控等,并且比传统的轮询技术更加高效和可靠,本文就给大家介绍基于SpringBoot+websocket实现消息对话功能,感兴趣的小伙伴可以自己动手试一试
    2023-09-09
  • spring boot 下支付宝的开箱既用环境

    spring boot 下支付宝的开箱既用环境

    这篇文章主要介绍了spring boot 下支付宝的开箱既用环境包括使用场景和使用技巧,非常不错,具有参考借鉴价值,需要的朋友参考下吧
    2017-10-10
  • java8 stream的分组功能实例介绍

    java8 stream的分组功能实例介绍

    这篇文章主要给大家介绍了关于java8 stream的分组功能的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • JDK源码之线程并发协调神器CountDownLatch和CyclicBarrier详解

    JDK源码之线程并发协调神器CountDownLatch和CyclicBarrier详解

    我一直认为程序是对于现实世界的逻辑描述,而在现实世界中很多事情都需要各方协调合作才能完成,就好比完成一个平台的交付不可能只靠一个人,而需要研发、测试、产品以及项目经理等不同角色人员进行通力合作才能完成最终的交付
    2022-02-02
  • 浅谈Maven环境隔离应用

    浅谈Maven环境隔离应用

    这篇文章主要介绍了浅谈Maven环境隔离应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-09-09
  • Java模拟单链表和双端链表数据结构的实例讲解

    Java模拟单链表和双端链表数据结构的实例讲解

    这篇文章主要介绍了Java模拟单链表和双端链表数据结构的实例,注意这里的双端链表不是双向链表,是在单链表的基础上保存有对最后一个链接点的引用,需要的朋友可以参考下
    2016-04-04
  • Spring Cloud Gateway组件的三种使用方式实例详解

    Spring Cloud Gateway组件的三种使用方式实例详解

    Spring Cloud Gateway是 Spring 官方基于 Spring5.0 、 SpringBoot2.0 和 Project Reactor 等技术开发的网关旨在为微服务框架提供一种简单而有效的统一的API 路由管理方式,统一访问接口,这篇文章主要介绍了Spring Cloud Gateway组件的三种使用方式,需要的朋友可以参考下
    2024-01-01
  • 深入解读Java代码组织中的package包结构

    深入解读Java代码组织中的package包结构

    这篇文章主要介绍了Java代码组织中的package包结构,是Java入门学习中的基础知识,需要的朋友可以参考下
    2016-03-03
  • Java使用kafka发送和生产消息的示例

    Java使用kafka发送和生产消息的示例

    本篇文章主要介绍了Java使用kafka发送和生产消息的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04

最新评论