IT 일기장

[MyBatis] separator UNION ALL 본문

프로그래밍 언어/XML

[MyBatis] separator UNION ALL

뽕슈 2021. 12. 20. 00:36
반응형

어느 한 프로젝트에서 사이트별로 인기검색어 목록이 떠야했는데.. 

기존에 구현했던 다른 프로젝트를 소스를 갖고왔으나

"서로 다른 타입에 담겨진 Parameter들을 DB 저장하려면 어떻게 해야되지?" 라는 난관에 부딪혔다

 

방법은 다음과 같이 정리했다

  1. list 담아서 추가한 mybatis에서 foreach문을 돌린다.
  2. map 담아서 추가한 mybatis에서 foreach문을 돌린다.
  3. 각각 String으로 받아서 foreach문을 돌린다.

3가지 방법은 구분값이 , 였을때 했던 방법들이다. 역시나 결과는 오류..

 

방법이 없나 싶었을 , Mapper @Param Annotation 붙이고 String으로 받되,

구분값을 UNION ALL 하는 방법을 찾았다.

원리는 가상 테이블 DUAL에 아래 쿼리처럼 UNION ALL 이어서 INSERT 하는것이다.. 

 

mngrMainServiceImpl.java

public String searchkeyProc(HashMap<String, Object> paramMap, 
ModelMap model, HttpServletRequest request, HttpServletResponse response, String returnPage){
	String siteCode = CommUtil.getManagerSiteCode(request);
    String usrPopWord = (String[])map.get("usrPopWord");
    
    mngrMainMapper.DeleteUserPopularWord();
    mngrMainMapper.InsertUserPopularWord(siteCode, usrPopWord);
    return returnPage;
}

 

Main_SQL.xml 

<insert id="InsertUserPopularWord" parameterType="string">
	/*InsertUserPopularWord*/
    INSERT INTO t_user_popular_word
    (
    	site_code,
        user_popw_word,
        user_popw_date,
        user_popw_order
    )
    <foreach collection="usrPopWord" item="userPopWord" index="index" separator="UNION ALL">
    	SELECT
        	#{siteCode},
            #{usrPopWord},
            SYSDATE,
            #{index}+1
        FROM DUAL
    </foreach>
</insert>
반응형
Comments