반응형
		<if test="cond_alarm_type_cd_list != null and cond_alarm_type_cd_list != ''">
			and C.alarm_type_cd in
			<foreach collection="cond_alarm_type_cd_list" item="item" index="index" open="(" separator="," close=")">
				#{item}
			</foreach>
		</if>

-> cond_alarm_type_cd_list =[]이면 아래와 같이 잘못된 query생성됨

        SELECT 
          FPS.PLT_SCHEDULE_ID AS "PLT_SCHEDULE_ID", 
          FPS.PLT_SCHEDULE_NM AS "PLT_SCHEDULE_NM", 
          FPS.PLT_CD AS "PLT_CD", 
          FPS.ROOM_ID AS "ROOM_ID", 
          FPS.DSC AS "DSC", 
          CASE WHEN FPS.ALL_DAY_YN = 'Y' THEN true WHEN FPS.ALL_DAY_YN = 'N' THEN false ELSE NULL END AS "ALL_DAY_YN", 
          FPS.START_DT AS "START_DT", 
          CASE WHEN FPS.ALL_DAY_YN = 'Y' THEN '종일' WHEN FPS.ALL_DAY_YN = 'N' THEN TO_CHAR(FPS.START_DT, 'HH24:mi') ELSE NULL END AS "START_TIME", 
          FPS.END_DT AS "END_DT", 
          FPS.REMARK AS "REMARK" 
        FROM 
          FARM_PLT_SCHEDULE FPS 
        WHERE 
          FPS.USE_YN = 'Y' 
          AND FPS.PLT_CD IN 
          AND FPS.START_DT BETWEEN ? :: timestamp 
          AND ? :: timestamp + interval '1 day'

 

<if test="apiKeys.size() > 0">
    <choose>
        <when test="ids==null || ids.isEmpty()">
            1 = 0 <!-- a test returning false, to adapt depending on you DB vendor -->
        </when>
        <otherwise>
            id IN <foreach item="id" collection="ids" open="(" separator="," close=")">#{id}</foreach>
        </otherwise>
    </choose>

참고: https://stackoverflow.com/questions/42995592/how-can-i-skip-query-if-where-in-clause-is-empty-in-mybatis-3

반응형

+ Recent posts