2017-06-05 3 views
0

My mapper xmlはこのようなものです。foreach for mybatis returns Null結果

<mapper namespace="EmployeeDaoMapper"> 
<resultMap id="employeeResultMap" type="Employee"> 
    <result property="employeeName" column="name"/> 
    <result property="employeeId" column="employee_id"/> 
</resultMap> 


<select id="getEmployees" parameterType="list" resultMap="employeeResultMap"> 
<!--<select id="getEmployees" resultType="Employee">--> 
    SELECT 
    <foreach item="item" index="index" collection="list" separator="," > 
     #{item} 
    </foreach> 
    FROM employees 
    WHERE LOWER (name) LIKE LOWER(#{searchQuery} +'%') OR 
    LOWER(login) LIKE LOWER(#{searchQuery} +'%') OR 
    LOWER(employee_id) LIKE LOWER(#{searchQuery} + '%') 
    LIMIT #{resultsLimit} 

</select> 

EmployeeMapperインタフェース

List<Employee> getEmployees(@Param("searchQuery") String searchQuery, @Param("resultsLimit") int 
     resultsLimit, @Param("list") List<String> attributes); 

クエリがヌルのリストを返します。

foreachの代わりに、私が直接列名を追加するとうまくいきます。

私は間違いをしています。私はクエリをチェックしましたが、クエリを正しく構築していますが、まだ結果をフェッチできません。

答えて

2

#{item}を$ {item}に変更してみてください。 #{item}を使用すると、Prepared Statementのパラメータマーカーが必要であり、salect列のリストに対して無効であることをMyBatisに伝えます。 $ {item}を使用すると、MyBatisは文字列を直接SQLに書き込みます。

+0

フォートワースを通じて提供されているように私はparameterType="map"に変更parameterType="list"を追加します。 +1。 –

0

私はジェフバトラーに同意します。

という名前のパラメータは、これはMyBatisのの新しいバージョンからの機能であることを言及する地図