gpt4 book ai didi

java - 将 MyBatis ResultMap 中的非列参数传递给嵌套选择

转载 作者:行者123 更新时间:2023-11-30 03:47:22 31 4
gpt4 key购买 nike

我的域模型中有一对多关系,我基本上想使用一个 MyBatis select 语句读取 Foos 和一组经过过滤的 Bars Bars 的嵌套选择。

解释一下:我的域模型类看起来或多或少像这样(当然真正的域模型更复杂,但我的问题归结为这一点):

public class Foo {
private String name;
private Set<Bar> bars;
// getters and setters omitted
}

public class Bar {
private String color;
// getters and setters omitted
}

现在我想读取具有特定名称的 Foos 和特定颜色的 Bars:

public interface FooRepository {
public List<Foo> selectFoosWithBars(String name, String color);
}

我的 MyBatis XML Mapper 文件的相关部分如下所示:

<select id="selectFoosWithBars" resultMap="fooResult">
SELECT f.id f_id, f.name f_name FROM foos f WHERE f.name = #{name}
</select>

<select id="selectBars" resultMap="barResult">
SELECT b.color b_color FROM bars b
JOIN foos f ON (b.f_id = #{id})
WHERE b.color = #{color}
</select>

<resultMap id="fooResult" type="Foo">
<result property="name" column="f_name">
<collection property="bars" select="selectBars" column="f_id" />
</resultMap>

<resultMap id="barResult" type="Bar">
<result property="color" column="b_color" />
</resultMap>

一切都很好,除了 selectBars SELECT 中的 #{color} 参数。我可以在第一个 selectFoosWithBars 中使用颜色参数,没有任何问题,但如何将参数传递给嵌套的 selectBars

请注意,我目前正在尝试调整 SQL 性能,但遗憾的是,无法简单地在第一个 SELECT 中加入 barsfoos 表。

最佳答案

这可以通过在主查询中使用人工列的技巧并适当配置column参数来实现。

这是列属性的相关部分documentation :

The column name from the database, or the aliased column label thatholds the value that will be passed to the nested statement as aninput parameter.

将带有颜色值的人工列添加到主查询中:

<select id="selectFoosWithBars" resultMap="fooResult">
SELECT f.id f_id, f.name f_name, #{color} f_color
FROM foos f WHERE f.name = #{name}
</select>

然后使用f_color列将参数传递给selectBars:

<select id="selectBars" resultMap="barResult">
SELECT b.color b_color FROM bars b
JOIN foos f ON (b.f_id = #{id})
WHERE b.color = #{color}
</select>

<resultMap id="fooResult" type="Foo">
<result property="name" column="f_name">
<collection property="bars" select="selectBars" column="{id=f_id,color=f_color}" />
</resultMap>

关于java - 将 MyBatis ResultMap 中的非列参数传递给嵌套选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25303712/

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