foreach for mybatis返回Null结果

时间:2017-06-05 17:31:13

标签: java foreach mybatis

我的mapper xml是这样的。

<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);

查询返回null列表。

如果我直接添加列名,那么它可以正常工作,而不是foreach。

我不确定我犯的是什么错误。我检查了查询,它正确构建查询,仍然无法获取结果。

2 个答案:

答案 0 :(得分:2)

尝试将#{item}更改为$ {item}。使用#{item},您告诉MyBatis应该有一个预准备的语句参数标记,并且对于salect列列表无效。如果使用$ {item},那么MyBatis会将字符串直接写入SQL。

答案 1 :(得分:0)

我同意杰夫巴特勒的意见。

我会将更改parameterType="list"添加到parameterType="map",因为命名参数是通过地图提供的