mybatis動態獲取資料列
#{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>