ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mybatis에서 선행 쿼리 돌려서 결과값을 후행 쿼리에서 사용하고 싶을 때
    개발/코딩관련 2024. 7. 18. 14:22

    일단 내가 원하는건 xml안에서만 첫번째 쿼리 돌려서 결과값을 바로 그 안에서 (xml에서) 변수에 값 넣어서 사용하듯 사용하고싶은데 그건 불가능하다.

     

    mybatis에서 선행 쿼리 돌려서 결과값을 후행 쿼리에서 사용하고 싶을 때 방법

     

    with절을 써서 쿼리 하나로 끝내는 방법 외에는 대표적으로 두가지 방법이 있다.

    with절은 단점이 명확해서 일단 논외로 친다.

     

     

     

    1. 두 개의 Mapper 메서드를 사용하여 처리하기
    • 첫 번째 메서드에서 선행 쿼리를 실행하고 결과값을 가져옵니다.
    • 두 번째 메서드에서 이 결과값을 매개변수로 전달하여 후행 쿼리를 실행합니다.
    public interface MyMapper {
        Integer getValueFromFirstQuery(@Param("param") String param);
    
        List<ResultType> getResultsUsingValueFromFirstQuery(@Param("value") Integer value);
    }

     

    <mapper namespace="com.example.MyMapper">
        <!-- 선행 쿼리 -->
        <select id="getValueFromFirstQuery" parameterType="String" resultType="Integer">
            SELECT value
            FROM first_table
            WHERE some_column = #{param}
        </select>
    
        <!-- 후행 쿼리 -->
        <select id="getResultsUsingValueFromFirstQuery" parameterType="Integer" resultType="ResultType">
            SELECT *
            FROM second_table
            WHERE some_other_column = #{value}
        </select>
    </mapper>

     

     

    @Service
    public class MyService {
        @Autowired
        private MyMapper myMapper;
    
        public List<ResultType> getResults(String param) {
            Integer value = myMapper.getValueFromFirstQuery(param);
            return myMapper.getResultsUsingValueFromFirstQuery(value);
        }
    }

     

     

     

     

    2. 서브쿼리

     

    <mapper namespace="com.example.MyMapper">
        <select id="getResults" parameterType="String" resultType="ResultType">
            SELECT *
            FROM second_table
            WHERE some_other_column = (
                SELECT value
                FROM first_table
                WHERE some_column = #{param}
            )
        </select>
    </mapper>

     

     

     

     

     

    내가 원하는건 서브쿼리에 있는 결과값을 변수처럼 xml안에서 사용할 수 있는걸 원했다.

    이런경우 with절, 임시테이블을 쓰거나 bind 태그를 사용하는 방법이 있는데 내가 원하는 방법은 아니었다.

    728x90

    '개발 > 코딩관련' 카테고리의 다른 글

    equirectangular panorama -> cube convert  (0) 2020.03.31
    자바스크립트 코딩 패턴  (0) 2020.02.25
    수직 가운데 정렬  (0) 2020.02.20
    크롬 전체화면  (0) 2020.01.23
    javascript에서 문자열을 변수명으로 바꾸기  (0) 2019.12.13
Designed by Tistory.