ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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.