2017-03-05 7 views
1

最近myBatisを試していますが、動的sqlsを作成するときに問題に直面しています。mybatisを使用して動的SQLがメールIDを取得しない

以下のように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の。

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

または

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

デ:

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

次の値が含まれていますDBベンダーに保留中です。

また、param値にあるものをエスケープした後に、%をparam値に追加することもできます。

それ以外の場合、それは=

+0

と悪くありません。ありがとうございました...私の考えは、mybatisでLIKEが使用されていると思います:) – GnZ

関連する問題