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啦!

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

相关文章

  • Spring中如何使用Comparator接口

    Spring中如何使用Comparator接口

    Comparator比较器接口可以将自身传递给排序方法(比如Collections.sort或Arrays.sort),以便对排序顺序进行精确控制。本文讲述Spring中如何使用Comparator接口
    2021-06-06
  • SpringBoot中版本兼容性处理的实现示例

    SpringBoot中版本兼容性处理的实现示例

    SpringBoot版本兼容性问题通常是由于依赖库与SpringBoot版本不兼容引起的,本文主要介绍了SpringBoot中版本兼容性处理的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • SpringBoot封装响应处理超详细讲解

    SpringBoot封装响应处理超详细讲解

    这篇文章主要介绍了SpringBoot封装响应处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • 分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存

    这篇文章主要为大家介绍了分布式医疗挂号系统SpringCache与Redis为数据字典添加缓存,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • Java中进程与线程的区别

    Java中进程与线程的区别

    这篇文章主要介绍了Java进程与线程的区别,进程(Process)是操作系统分配资源的基本单位,线程(Thread)是操作系统能够进行运算调度的基本单位,下文更多两者区别。需要的小伙伴可以参考一下
    2022-05-05
  • Java使用EasyExcel动态添加自增序号列

    Java使用EasyExcel动态添加自增序号列

    本文将介绍如何通过使用EasyExcel自定义拦截器实现在最终的Excel文件中新增一列自增的序号列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java实现将汉字转化为汉语拼音的方法

    Java实现将汉字转化为汉语拼音的方法

    这篇文章主要介绍了Java实现将汉字转化为汉语拼音的方法,实例演示了Java引用pinyin4j库实现汉子转化成拼音的使用技巧,需要的朋友可以参考下
    2015-12-12
  • Java 中 Class Path 和 Package的使用详解

    Java 中 Class Path 和 Package的使用详解

    这篇文章主要介绍了Java 中 Class Path和Package的使用详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • 详解java中的四种代码块

    详解java中的四种代码块

    这篇文章主要介绍了详解java中的四种代码块,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • java 获取用户的MAC地址多种方法实例详解

    java 获取用户的MAC地址多种方法实例详解

    这篇文章主要介绍了JAVA实现获取用户的MAC地址的多种方法实例,需要的朋友可以参考下
    2017-04-04

最新评论