카테고리 없음

Mybatis : insert return value

쭈구링 2020. 6. 14. 14:51

ibatis 에서는 insert 후 방금 한 key value 를 뱉고 싶으면

이렇게 selecty key 라는 테그 안에 원하는 셀렉트 문을 써야 한다.

<insert id="insertA" parameterClass="com.vo.AVO">
   <selectKey keyProperty="aid" resultClass="int" type=" pre">
       SELECT SEQUENCE.NEXTVAL AS SEQ.A_ID FROM DUAL
   </selectKey>

   INSERT INTO A (
       A_ID
       , A_NAME
    ) VALUES (
        #aId#
        , #aName#
    )
</insert>

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 만 쓰고 싶은데.. 일단 실패

이게 모두 성공하는거 같은데 난 또 안됐어.

모두를 따라 했는데 모두만 되고 나는 아직 안됐어.

내일 모레쯤 다시 할래 화나니깐.