#{item, jdbcType=VARCHAR} </foreach> from tablename这样的方法做查询。
但是有的时候传过来的是某个属性的不同值的list,却要把这个不同值当作查询的列名时,容易让人头疼,实际上这种查询也是可以巧用mybatis的查询解决的,示例如下:
<select id="querySumList" parameterType="java.util.Map" resultType="java.util.Map" >
SELECT
<foreach collection="codes" item="item" open="" separator=""
close="" >
<if test="item!=null and item != ''">
IFNULL(sum(t.${item}), 0),
</if>
</foreach>
t.ENTERPRISE_CODE,
t.ENTERPRISE_NAME
FROM
(
SELECT
<foreach collection="codes" item="item" open="" separator=""
close="" >
<if test="item!=null and item != ''">
CASE
WHEN i.GOODS_ID = #{item, jdbcType=VARCHAR} THEN
i.NUM
END ${item},
</if>
</foreach>
r.ENTERPRISE_CODE,
r.ENTERPRISE_NAME
FROM
PSI_INVENTORY i
LEFT JOIN erp_enterprise_resource r ON r.ENTERPRISE_CODE = i.ENTERPRISE_CODE
WHERE
i.DATA_TYPE = 1
AND i.GOODS_ID IN
<foreach collection="codes" item="item" open="(" separator=","
close=")">
#{item, jdbcType=VARCHAR}
</foreach>
) t
GROUP BY
t.ENTERPRISE_CODE,
t.ENTERPRISE_NAME
</select>