-
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