【问题标题】:Mybatis Batch Select Query - JavaMybatis 批量选择查询 - Java
【发布时间】:2014-06-10 09:10:33
【问题描述】:

我想从一个表中获取所有记录,同时满足mybatis select查询中的某些条件。 举个例子:

SELECT * FROM Employee e WHERE e.location = ? AND e.status = ? 

参数集作为映射列表传递以生成多个查询,如下所示。

List = {{location=Colombo, status=available}, {location=Galle, status=onCall}}

SELECT * FROM Employee e WHERE e.location = 'Colombo' AND e.status = 'available' 
SELECT * FROM Employee e WHERE e.location = 'Galle' AND e.status = 'onCall'

我想做的是以批处理模式运行上述查询。

这是我尝试过的,但查询不符合预期。

<select id="availabeEmployees" parameterType="java.util.List"
        resultMap="employeeDtoMap">
    SELECT * FROM Employee e
    WHERE
    <foreach item="item" index="index" collection="list">
        e.location = #{item.location}
        AND e.status = #{item.status}
    </foreach>
</select>

【问题讨论】:

    标签: java mysql spring batch-processing mybatis


    【解决方案1】:

    我想出了以下解决方案。我已经使用 UNION 来组合所有的选择查询。添加一些棘手的解决方案以避免将 UNION 附加到最后一个选择查询。为地图的最后一个元素设置last == true,为其他元素设置false

    <select id="availabeEmployees" parameterType="java.util.List"
            resultMap="employeeDtoMap">
        <foreach item="item" index="index" collection="list">
            SELECT * FROM Employee e
            WHERE e.location = #{item.location}
            AND e.status = #{item.status}
            <if test="item.last == 'false'">UNION</if>
        </foreach>
    </select>
    

    【讨论】:

    • 您不需要那种棘手的解决方案来用UNION 分隔查询。只需在&lt;foreach ... 中添加separator="UNION" 即可。
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    相关资源
    最近更新 更多