目录

foreach中split使用

mybatis踩坑


foreach中split使用

经常会有这种需求,查询条件的入参是由逗号(或空格,分号,竖线等)分隔,即需要拆分。

例如查用户订单,入参 "0011,0012,0013,0014",我们会先在业务代码里 split ,再循环去数据库查。

而在mybatis里,xml里可以用java的方法:即在foreach标签的collection属性里,值直接调用split。

代码如下:

<if test="ids != null and ids !='' ">
  AND id in
    <foreach collection="ids.split(',')" item="id" separator="," open="(" close=")">
      #{id}
    </foreach>
</if>

foreach 说明:

collection:常用List、数组、map
item:集合中元素迭代时的别名,该参数为必选。#{}获取值用这个别名
              
open:foreach代码的开始符号,一般是(,和close=")"合用。常用在in(),values()时。该参数可选

close: foreach代码的关闭符号,一般是)和open="("合用。常用在in(),values()时。该参数可选。
separator:元素之间的分隔符,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。

index:迭代过程中每次迭代到的位置(下标)。在list和数组中,index是元素的序号,在map中index是元素的key,item是元素的value,该参数可选

扩展知识:

OGNL表达式

为了熟练掌握动态SQL你必须要知道Mybatis中的OGNL表达式 - 云+社区 - 腾讯云

以下是mybatis其他常见问题

mybatis踩坑

1.入参list时,foreach取不到值,报错

mybatis 入参 参数 Map List

 2.if判断没进逻辑,例如<if test = " org != '1' ">

mybatis 常见问题 <if> 单字符

 3.where条件里if标签的and报错

mybatis <if>标签 and问题

更多推荐

mybatis foreach split 多个值