2017-03-05 26 views
1

我正在嘗試myBatis最近,我一直在形成動態sqls時遇到問題。動態SQL使用mybatis不提取郵件編號

當使用myBatis形成如下所示的動態sql時,除了在電子郵件字段中發送值時,它適用於所有字段。

當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的。

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

你只是忘記了%周圍的參數值:

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

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

德等待數據庫供應商。

或者,您可以在轉義那些可能在參數值中的參數後,在參數值中添加%

否則它表現爲=

+0

我的壞..謝謝很多...當LIKE在mybatis中使用,我相信%是固有的:) – GnZ