【问题标题】:foreach for mybatis returns Null resultsforeach for mybatis 返回 Null 结果
【发布时间】:2017-11-06 13:15:59
【问题描述】:

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

查询返回空列表。

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

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

【问题讨论】:

    标签: java foreach mybatis


    【解决方案1】:

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

    【讨论】:

    • 值得一提的是,这是新版 myBatis 的一个功能。虽然 +1。
    【解决方案2】:

    我同意杰夫·巴特勒的观点。

    我会将 parameterType="list" 更改为 parameterType="map",因为命名参数是通过 Map 提供的

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      相关资源
      最近更新 更多