MyBatis의 조건 지점(등)에서 문자열 소양을 활용할 때 주의사항

4587 단어 MyBatisJava
현장에 빠진 사람이 있으니까 기억할게요.

반하는 현상은?


패라메트릭 객체의 속성 값(String형)에 따라 어셈블된 SQL을 변경하려면 MyBatis에서 제공하는 <if> 레이블을 사용하여 다음과 같은 조건부로 분할합니다.
매개 변수 대상
public class MyParam {
  private String status;
  // ...
}
맵 XML(조각)
<if test="status == '0'">
  ...
</if>
개발자로서의 생각...status의 값은 "0"인 상황에서 특정한 조건을 더하고 싶은데...실제로 이 조건은 true으로 바뀌지 않았다.

왜?


마이바티스test는 속성으로 지정된 값을 GNL식로 평가하지만, GNL식'0'에서는 행String으로 처리하는 것이 아니라 유형이 다른 값의 비교가 항상Character처럼 끝난다.
신경쓰이는 건... 이 동작이 규격인가요?이런 부분.
MyBatis가 사용하는 것을 보십시오OGAL 라이브러리의 언어 참조
  • String literals, as in Java (with the addition of single quotes): delimited by single- or double-quotes, with the full set of character escapes.
  • Character literals, also as in Java: delimited by single-quotes, also with the full set of escapes.
  • 이런 기록이 있다.명시가 없다
  • false -> '0'
  • Character -> '00'
  • String -> "0"
  • String->"00"(당연...)
  • 그러니까

    그럼 큰 따옴표로 묶을까요?→


    맵 XML(조각)
    <if test="status == "0"">
      ...
    </if>
    
    아시다시피... (물론 그렇죠...) 상술한 기록은 XML로 성립될 수 없습니다.그러나'이따옴표로 묶는다'는 방법은 옳다.

    XML 속성의 괄호를 바꾸면 좋지 않습니까?→


    여러 가지 해결 방법이 있는데... 직관적인 것 같은데... XML 속성의 괄자를 "String"에서 """로 바꾸고 '속성의 값에 "test"을 사용합니다.
    맵 XML(조각)
    <if test='status == "0"'>
      ...
    </if>
    

    다른 해결 방법은?


    물론 다른 해결 방법도 있다.

    상수적 이용


    문자열 소양을 직접 지정하지 않고 상량화하여 OGAL식에서 참조할 수 있다.
    사실... 어쩌면 이런 방법이 있어야 하는 자세일지도 몰라요.
    상수류
    package com.example.domain;
    public class Status {
      public static final String STOP = "0";
      // ...
    }
    
    맵 XML(조각)
    <if test="status == @com.example.domain.Status@STOP">
      ...
    </if>
    

    솔리드 참조 활용


    문자열 소양의 괄문자를 """의 실체 참조 """로 설정하면 OGLL식 방면을 "&quot;"로 식별할 수 있다.그러나 보시다시피...가독성은 상당히 낮다.
    맵 XML(조각)
    <if test="status == &quot;0&quot;">
      ...
    </if>
    

    토스린의 이용


    GNL식은 방법을 호출할 수 있기 때문에 호출"0"Character#toString()로 변환할 수 있다.음... 움직였지만 왠지 진 느낌이 여간 아니었어
    맵 XML(조각)
    <if test="status == '0'.toString()">
      ...
    </if>
    

    총결산


    상수 설계를 제대로 할 수 있다면 상수를 활용하는 게 좋을 것 같은데...이번에는'문자열 능력을 활용한다는 전제'로 신청서를 쓰게 되는데...'XML 속성의 괄자를'Stirng로 바꾸는 방법을 추천한다.
    그나저나 푹 빠진 엔지니어가 온라인에서'토스트링 사용'해법을 찾아 수정안을 제시했다

    좋은 웹페이지 즐겨찾기