1. 程式人生 > >mybatis動態獲取資料列

mybatis動態獲取資料列

在工作中有時候會遇上這樣的查詢,查詢的資料列不定,是根據前臺傳過來的一個list來動態獲取的,如果這個list傳過來的是表中的列名,那麼可以簡單的使用select  <foreach collection="codes" item="item" open="" separator="," close="">

#{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>