gpt4 book ai didi

java - mybatis迭代map并执行多个select语句

转载 作者:行者123 更新时间:2023-12-01 08:53:29 24 4
gpt4 key购买 nike

我想传入一个map,并使用mybatis迭代该map并执行多个select语句并将结果收集在一个map中。这可能吗?下面将 AND 作为一个查询。

<select id="populate" parameterType="Map" resultType="hashmap">
<foreach collection="dataMap" index="key" item="value" open=""
separator=" and " close="">
select count(*) as countS from tabl where

id LIKE #{key,jdbcType=VARCHAR} || '%'
</foreach>
</select>

最佳答案

这样写是行不通的,%必须是绑定(bind)参数的一部分。我会做这样的事情:

<bind name="currentKey" value = 'key + "%"' />
id LIKE #{currentKey,jdbcType=VARCHAR}

编辑:关于LIKE,我给出了最常见的答案,我发现其他帖子说明你的方法有效,并且在安全性(注入(inject))方面它甚至可能更好,因为%是不是绑定(bind)参数的一部分。

% 是被视为字符串的一部分还是运算符?

结果一样吗?结果一样吗?性能一样吗? (如果可以从“LIKE”中获得性能)。

如果参数映射中有2个键,则生成的SQL将为:

SELECT COUNT(*) AS countS FROM tabl WHERE id LIKE ?
AND
SELECT COUNT(*) AS countS FROM tabl WHERE id LIKE ?

我很确定这是行不通的。

选择之间的分隔符必须为;。如果您的数据库允许多个命令语句。

如果您仅使用输入映射中的键,则最好仅传递 keySet()

最终,我会编写一个将返回单个 Map: key => count: 的单个选择

SELECT 
<foreach collection="dataMap.keySet()" value="key", separator=", ">
<bind name="currentKey" value = 'key + "%"' />
SUM(CASE WHEN id LIKE #{currentKey,jdbcType=VARCHAR} THEN 1 ELSE 0 END) AS count_${key}
</foreach>
FROM tabl

当然,将CASE WHEN替换为您的数据库方言使用的等效结构。

关于java - mybatis迭代map并执行多个select语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42214956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com