연습용더미1
506
2021-04-26 14:14:41
12
1511

mybatis 뻘짓 해결한 것 백업 겸 팁 공유


현재 JPA CUD + Mybatis R 프로젝트 중.

mybatis로 select 시 받아올 dto(vo)의 기본 생성자가 없을 경우, mybatis에서 매핑할 때 변수 명이 아니라 변수 순서만으로 매핑함.

예를 들어 생성자가 (Long sId, String memo, Date regDt) 이고 mybatis에서 s_id, reg_dt, memo 를 받아올 경우 오류가 남. reg_dt를 String memo에, memo를 Date regDt에 매핑하려고 함. 그러므로 웬만해선 순서 맞추는 습관을 들입시다. 이거 구글에 암만 찾아봐도 안나와서 혼자 막 코드 바꿔가면서 해결했네요.

0
  • 댓글 12

  • 오후
    2k
    2021-04-26 14:29:10
    resultmap 쓰시면됩니다.
  • 보후리
    450
    2021-04-26 14:29:11

    팁 감사합니다

  • 연습용더미1
    506
    2021-04-26 14:45:01

    @오후

    resultMap 자체가 안익숙하기도 하거니와, 드럽게 길어지더군요...

  • kenu
    53k
    2021-04-26 14:46:49
    해당 게시물은 관리자에 의해 사는얘기에서 Tips & 강좌로 이동 되었습니다.
  • rezigrene
    1k
    2021-04-26 19:40:17

    순서에 의존하는건 좀 많이 위험해보이네요.

    기본생성자를 추가해주는게 차라리더 낫지않나요?

    아니면 resultMap 을 어쩔수없이 쓴다든지

  • 연습용더미1
    506
    2021-04-27 10:49:24 작성 2021-04-27 10:50:50 수정됨

    @rezigrene

    보안때문에 인코딩 된 데이터가 있어서 서비스에서 일일히 변환하기보단, 생성자로 받아서 바로 변환이 되게 하려고 한겁니다.

    기본 생성자를 생성하면 무조건 기본 생성자로 가버려서 자동 디코딩 및 마스킹이 안되더군요. 서비스에서 일일히 해줘야하는데, 사실 그게 맞는거 같으면서도 회사에서 하는 방식이라 저도 따르고 있습니다.

    뭐 사실 따지면 resultMap이 제일 안전하겠지만서도, resultMap 만큼은 쓰기 싫더군요. 나중에 유지보수 할 때도 resultMap이나 순서 고정이나 난이도는 비슷비슷 할 듯 하기도 하고요.

  • 대전개발자커뮤니티
    887
    2021-04-27 13:12:10

    @연습용더미1

    데이터 인코딩이나 디코딩 또는 마스킹 관련해서는 마이바티스 ObjectFactory를 재정의해서 사용하시면 깔끔하게 해결됩니다. 마이바티스 구현 능력이 높은 편이시면 Interceptor 를 생성해서 추가하면 더욱 좋습니다.

  • rezigrene
    1k
    2021-04-27 18:36:45

    마스킹등의 로직추가가 필요한거라면 setter나 getter쪽에 해당로직을넣어보시는건 어떨까요.

  • 연습용더미1
    506
    2021-04-28 09:31:05 작성 2021-04-28 09:31:27 수정됨

    @대전개발자커뮤니티

    조언 감사합니다. 개인적으로 찾아보겠습니다. 다만 회사 프로젝트에서는 인턴따리가 본인도 잘 모르는 것을 넣겠다고 하는 건 힘들거같네요.


    @rezigrene

    getter는 테스트 용으로만 사용하고, setter는 사용하지 않습니다. 어쩌다보니 그렇게 정해졌네요. 전에는 setter에 넣어보고 했었는데, 다른 문제였는지 기억은 안 나는데 안됐던 기억은 있습니다.

  • 대전개발자커뮤니티
    887
    2021-04-28 10:06:06

    @연습용더미1 
    참고할 만한 소스 코드를 첨부합니다.

    오브젝트 팩토리(ObjectFactory)
    - http://mybatisprinciple.cafe24.com/chapter04/org/mybatis/custom/CustomObjectFactory.txt


    인터셉터(Interceptor)

    - http://mybatisprinciple.cafe24.com/chapter04/org/mybatis/custom/CustomPlugin.txt

    - https://github.com/ikchan/mybatis-plugin-cryptogram/blob/master/cryptogram/src/main/java/org/mybatis/custom/plugin/CryptogramInterceptor.java

  • 연습용더미1
    506
    2021-04-28 10:22:19

    @대전개발자커뮤니티

    감사합니다.

  • 한국은역시자바
    623
    2021-04-29 17:34:15

    https://kim-jong-hyun.tistory.com/23

  • 로그인을 하시면 댓글을 등록할 수 있습니다.