ABOUT ME

블로거들은 맨날 '아 이거때문에 2박 3일 개고생을 했는데, 이것만 하면 되더라. 아무것도 아니었어.' 라는 식으로 얘기하는데, 나는 맨날 이것만 해도 안되서 저것도 했는데 그래도 안되더라. 이건 비밀인데 그냥 공부하면서 손심심해서 쓰는 블로그니까 너무 믿지 말길.

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

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

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

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

Designed by Tistory.