안녕하세요 개발중에 궁금한것이 잇어서 질문드립니다.
dao 에서 mapper로 넘긴 파라미터 오브젝트를 mapper에서 parameterType을 지정하지 않아도
정상적으로 쿼리 변수에 바인딩되어 수행되는데 이유를 모르겟습니다..
심지어 dao에서 넘긴 파라미터 오브젝트와 mapper에서 지정한 parameterType이 틀려도 dao에서 넘긴 파라미터 오브젝트가 사용됩니다.
ex1) 파리미터타입을 지정하지 않아도 값이 바인딩 됨
#VO
public class TestVO {
private String id;
get..
set..
}
# DAO
sqlSessionTemplate.selectOne("test.selectTest", testVO);
#Mepper
<select id="selectTest" resultMap="hashMap">
select * from test where id = #{id}
</select>
ex2) 파라미터타입에 지정된 VO를 무시하고 sqlSessionTemplate에서 넘긴 VO가 사용됨
#VO
public class TestVO {
private String id;
get..
set..
}
public class TmpVO {
private String name;
get..
set..
}
# DAO
sqlSessionTemplate.selectOne("test.selectTest", testVO);
#Mepper
<select id="selectTest" parameterType="com.test.vo.TmpVO" resultMap="java.util.HashMap">
select * from test where id = #{id}
</select>
ex3) typeAlias 설정하지 않아도 hashMap, string 등이 사용가능함
# DAO
sqlSessionTemplate.selectOne("test.selectTest", hashMapParams);
#Mepper
<select id="selectTest" parameterType="hashMap" resultMap="hashMap">
select * from test where id = #{id}
</select>
가설은.. 매퍼에서 지정한 파라미터 타입에 상관없이 DAO 넘겨준 파리미터 오브젝트가 오버라이드 된다 인데
찾아봐도 왜 그런지 잘모르게습니다.