2017-06-05 244 views
0

我的映射器xml就是这样。foreach for mybatis返回空值结果

<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},您告诉MyBatis应该有一个准备好的语句参数标记,并且对于列选择列表无效。如果您使用$ {item},那么MyBatis将直接将该字符串写入SQL中。

+0

提供值得一提的是,这是从的MyBatis的新版本一个功能,我想补充的变化parameterType="list"parameterType="map"。 +1虽然。 –

0

我同意Jeff Butler。

为命名的参数是通过一个地图