myBatis模糊查询以及使用in

2,083 阅读1分钟

foreach标签 配合in

mybatis并不能直接 in 所以遇到使用in的时候必须使用 foreach 标签进行遍历:

collention:需要遍历的属性名

item:便利时的属性名(在遍历语句中使用)

index:遍历的下标,可以理解为当前遍历为第几轮

open:即遍历前的符号

close:便利后的符号

separator:遍历的参数与参数间的分隔符

示例:

<!-- 根据用户id去查找志愿者id -->
<select id="xxxx" parameterType="list" resultType="long">
    SELECT v.volunteer_id
    FROM volunteer v
    WHERE v.user_id IN 
    <foreach collection="list" item="userId" index="index" open="(" close=")" separator=",">
        #{userId}
    </foreach>
</select>

in多个字段的示例:

<select id="xxxx" parameterType="list" resultType="long">
    SELECT v.volunteer_id
    FROM volunteer v
    WHERE (v.credential_type, v.credential_number) in (
        SELECT f.credential_type,f.credential_number
        FROM favorites f
        WHERE f.favorites_id IN
        <foreach collection="list" item="favoritesId" index="index" open="(" close=")" separator=",">
            #{favoritesId}
        </foreach>
    )
</select>

模糊查询-concat

模糊查询的三种方式:

  • 第一种:直接拼接

    <if test="trueName != null and trueName != ''">
      and e.true_name like "%"#{trueName}"%"
    </if>
    
  • 第二种:concat标签【常用】

    <if test="trueName != null and trueName != ''">
      and e.true_name like concat('%', #{trueName}, '%')
    </if>
    
  • 第三种:bind标签【暂未测试】

    <if test="trueName != null and trueName != ''">
      <bind name="pattern" value="'%'+ trueName +'%'" />
      and e.true_name like #{pattern}
    </if>