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>