2017-03-05 5 views
1

최근에 myBatis를 사용하고 있는데 동적 sqls를 작성할 때 문제가 발생했습니다.동적 SQL이 메일 ID를 가져 오지 않고 mybatis를 사용합니다.

아래와 같이 동적 SQL을 형성하기 위해 myBatis를 사용할 때 전자 메일 필드에 값을 보낼 때를 제외하고는 모든 필드에서 잘 작동합니다.

emailId 전달시 데이터를 가져 오지 않습니다. emailId 열의 @ 기호에 문제가 있는지 의심 스럽습니까?

<select id = "getAllWithFilter" parameterType="java.util.Map" resultMap="result"> 
    SELECT * FROM EMPLOYEE_LOOKUP 

    <where> 
     <if test = "firstName != null"> 
     FIRST_NAME LIKE #{firstName} 
     </if> 

     <if test = "phoneNo != null"> 
     AND PHONE LIKE #{phoneNo} 
     </if> 

     <if test = "emailId != null"> 
     AND EMAIL LIKE #{emailId} 
     </if> 

     <if test = "analystGroup != null"> 
     AND GROUP LIKE #{empGroup} 
     </if> 

     <choose> 
     <when test = "activeFlag != null"> 
     AND EXPIRATION_DATE IS NULL 
     </when> 

     <when test = "inactiveFlag != null"> 
     AND EXPIRATION_DATE IS NOT NULL 
     </when> 
    </choose> 
    </where> 

</select> 

은 MyBatis로의 디버그 로그입니다 - Log4J를.

AND EMAIL LIKE '%' + #{emailId} + '%' 

또는

AND EMAIL LIKE '%' || #{emailId} || '%' 

드 :

DEBUG [http-bio-9081-exec-1] - ==> Preparing: SELECT * FROM EMPLOYEE_LOOKUP WHERE EMAIL LIKE ? AND GROUP LIKE ? AND EXPIRATION_DATE IS NULL 
DEBUG [http-bio-9081-exec-1] - ==> Parameters: abc(String), F(String) 

데이터베이스, 당신은 단순히 매개 변수 값을 둘러싼 % 잊어 버린

EMAIL  | GROUP 
---------------------- 
[email protected] | F 

답변

2

다음과 같은 값을 포함 DB 공급 업체에 대기 중입니다.

또는 %을 param 값에있는 값을 이스케이프 처리 한 후에 param 값에 추가 할 수 있습니다. 등의 MyBatis에서 사용되는 경우 ...

+0

내 나쁜 ... 덕분에 많은 =으로

그렇지 않으면 내가 %가 내재되어있는 생각, 행동 :) – GnZ