Mybatis : insert return value
ibatis 에서는 insert 후 방금 한 key value 를 뱉고 싶으면
이렇게 selecty key 라는 테그 안에 원하는 셀렉트 문을 써야 한다.
<insert id="insertA" parameterClass="com.vo.AVO"> |
type=" [ pre || post ]
[ 전에 할꺼냐 || 후에 할꺼냐 ]
타입은 두개중에 골를수 있다.
Mybatis 에서는
selectkey 를 사용하지 아니하고 keyProperty 속성을 사용하면 내 손가락의 관절을 조금 보호 할수 있다.
<insert id="saveMetro" parameterType="dto.MetroDTO" keyProperty="metroId" keyColumn="METRO_ID" useGeneratedKeys="true" > insert into METRO ( METRO_NAME , METRO_LATITUDE , METRO_LONGITUDE ) VALUES ( #{metroName} , #{metroLatitude} , #{metroLongitude} ) </insert> |
초고수 라면 바로 알아봤겠지만, (몰라 나는. ㅎ..ㅎ 못알아봤어)
그런데 사실 처음에 keyProperty 에 METRO_NAME 이라고 했는데 그냥 METRO_ID (id) 값을 뱉는다.
useGeneratedKeys="true" 얘가 Auto_increase 로 만들어진 key 뱉도록 만들어 진것 같다.
그러면 key 에 해당하는 VO나 DTO는 당연히 int 거나 integer 여야 할거같다.
그런데 keyProperty 에 무슨 값이든 METRO_ID 를 뱉었지만, 없으면 안뱉음
존나 이상. 그치만 뱉어줘서 고마웡
keyColumn 이랑 keyProperty 랑 매핑이 된다.
그러니까,
param vo 나 dto 에 keyColumn 이 매핑을 해준다.
또, 나의 dto 는 builder 로 구성했고, getter 는 없다. 나는 key 하나만 뱉어주길 바란다. 리치 dto 는 좋지만 만능 dto 는 피하고싶다.
나의 dto 를 더럽히고 싶지 않다. 특히 setter getter 를 만들고 싶지않았다. 그렇기 때문에 나는 selectKey 를 사용하기로 했다. ㅎ..ㅎ
parameterType="dto.MetroDTO"
이부분은 사실 com. 부터 패키지 명을 full로 써줬는데 나도 DTO 만 쓰고 싶은데.. 일단 실패
이게 모두 성공하는거 같은데 난 또 안됐어.
모두를 따라 했는데 모두만 되고 나는 아직 안됐어.
내일 모레쯤 다시 할래 화나니깐.