我最近尝试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
答案 0 :(得分:2)
您忘记了参数值周围的%
:
AND EMAIL LIKE '%' + #{emailId} + '%'
或
AND EMAIL LIKE '%' || #{emailId} || '%'
取决于数据库供应商。
或者,您可以在转义可能位于param值中的值后,在param值中添加%
。
否则表现为=