在mybatis中构建带有sql in查询的mapper语法

在mapper中编写带有sql in语法的sql时,需要注意不能直接以字符串"in(…)"的形式将语句贴在sql中,需要以list集合的形式遍历出来,具体的表达方式如下:

<select id="selectAllServiceByServiceType" resultMap="BaseResultMap2" parameterType="java.util.List">
SELECT DISTINCT SERVICE_TYPE, IMAGE_TAG
FROM `SERVICE_CONFIG`
WHERE STATUS = 1
AND SERVICE_TYPE IN
<foreach collection="list" item="item" index="index" open="(" separator="," close=")">
#{item}
</foreach>
ORDER BY SERVICE_TYPE;
</select>

上面得到的sql也就是:

SELECT DISTINCT SERVICE_TYPE, IMAGE_TAG
FROM `SERVICE_CONFIG`
WHERE STATUS = 1
AND SERVICE_TYPE IN (1, 2, 3, 4, 5);

这里需要注意的是,foreach中的collection字段的list值是固定表达方式,在对应的mapper方法中,传入参数名也应为list,具体表示如下:

List<ServiceConfig> selectAllServiceByServiceType(List<Integer> list);