动态 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} || '%'
取决于数据库供应商。
或者,您可以在转义可能包含在参数值中的参数后,在参数值中添加 %
。
否则它表现为=
我最近在尝试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} || '%'
取决于数据库供应商。
或者,您可以在转义可能包含在参数值中的参数后,在参数值中添加 %
。
否则它表现为=