로메오의 블로그

[Spring] IN 조건문을 위한 foreach 사용하기 - myBatis, sql 본문

Backend/Spring

[Spring] IN 조건문을 위한 foreach 사용하기 - myBatis, sql

romeoh 2019. 12. 20. 16:37
반응형

Spring Boot / Oracle / Mybatis 차례

 

CASE1

Service.java

package project;

import java.util.ArrayList;
import java.util.List;

@Service
public class Service {
	
    public List<dataDTO> retrieveTasks(DataDTO dataDTO) {
    	// 파라미터 states는 "10,20,30" 형식으로 받는다.
    	String [] states = dataDTO.getStates().split(",");
        List<String> stateList = new ArrayList<String>();
        
        for (String state : states) {
        	stateList.add(state)
        }
        dataDTO.setStateList(stateList)
        return mappper.retrieveTasks(dataDTO)
    }
}

 

mapper.xml

<select id="retrieveTasks" parameterType="project.DataDTO" resultType="project.DataDTO">
	<![CDATA[
    	SELECT 
               ID
             , NAME
          FROM MY_TABLE
         WHERE 1=1
    ]]>
    <if test="myId != null and myId != ''">
           AND ID = #{myId, jdbcType=VARCHAR}
    </if>
    <if test="stateList != 0">
           AND STATE IN 
           <foreach collection="stateList" item="state" index="index" separator="," open="(" close=")">
           	#{state}
           </foreach>
    </if>
</select>

 

 

 

 

CASE2

ServiceImpl.java

package project;

import java.util.ArrayList;
import java.util.List;

@Service
public class Service {
	
    public List<dataDTO> retrieveTasks(DataDTO dataDTO) {
    	// 파라미터 states는 "10,20,30" 형식으로 받는다.
    	String states = (String) dataDTO.get("state");
        List<String> stateList = new ArrayList<String>();
        
        if (states != null) {
        	 String[] stateArr = ((String) dataDTO.get("state")).split(",");
             for (String state : stateArr) {
        	     stateList.add(state)
             }
        }
        dataDTO.set("stateList", stateList)
        return mappper.retrieveTasks(dataDTO)
    }
}

mapper.xml

<select id="retrieveTasks" parameterType="project.DataDTO" resultType="project.DataDTO">
	<![CDATA[
    	SELECT 
               ID
             , NAME
          FROM MY_TABLE
         WHERE 1=1
    ]]>
    <if test="myId != null and myId != ''">
           AND ID = #{myId, jdbcType=VARCHAR}
    </if>
    <if test="stateList.size != 0">
           AND STATE IN 
           <foreach collection="stateList" item="state" index="index" separator="," open="(" close=")">
           	    #{state}
           </foreach>
    </if>
</select>

 

 

 

 

 

 

 

Spring Boot / Oracle / Mybatis 차례

 

반응형
Comments