我的域模型中有一对多的关系,我基本上想要阅读Foos
和一个过滤的Bars
集合,其中一个MyBatis select语句使用嵌套的select { {1}}。
解释一下:我的域模型类看起来或多或少像这样(当然真正的域模型更复杂,但我的问题归结为这个):
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
MyBatis XML Mapper文件的相关部分如下所示:
public interface FooRepository {
public List<Foo> selectFoosWithBars(String name, String color);
}
除了<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>
SELECT中的#{color}
参数外,一切正常。我可以在第一个selectBars
中使用颜色参数而没有任何问题,但是如何将参数传递给嵌套的selectFoosWithBars
?
请注意,我目前正在尝试对SQL进行性能调优,而在第一个SELECT中简单地加入selectBars
和bars
表是不可能的。
答案 0 :(得分:1)
这在mybatis中是不可能的。
mybatis使用的算法如下:
答案 1 :(得分:0)
如果我正确地阅读了这个,那么我在这里讨论的解决方案相同:
how to pass a constant value to nested column with mybaits association
应该有效。您可以通过从selectFoosWithBars
选择中选择它来将其作为列属性传递。