使用mybatis的动态SQL无法获取邮件ID

时间:2017-03-05 23:28:29

标签: mybatis dynamic-sql

我最近尝试myBatis,在形成动态sqls时遇到了问题。

当使用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中的DEBUG登录 - 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
----------------------
abc@gsf.com | F

1 个答案:

答案 0 :(得分:2)

您忘记了参数值周围的%

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

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

取决于数据库供应商。

或者,您可以在转义可能位于param值中的值后,在param值中添加%

否则表现为=