动态 SQL 使用 mybatis 不获取邮件 ID

Dynamic SQL using mybatis not fetching the mail id

我最近在尝试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 - Log4J 中的 DEBUG 日志。

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

你只是忘记了参数值周围的 %:

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

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

取决于数据库供应商。

或者,您可以在转义可能包含在参数值中的参数后,在参数值中添加 %

否则它表现为=