我有以下POJO,我希望mybatis将我的数据库条目映射到:
public class TestCase {
private List<Filter> filters = new ArrayList<>();
}
我有10个过滤器实现,都实现了Filter
接口。
public interface Filter {
boolean isExcluded();
}
所有10个过滤器实现都有10个关联表。除了与testcase
表的关系以外,这些表没有不具有相同的列。
public class SomeFilter implements Filter {
// Some implementation of Filter
}
在XML映射器中,我将testcase
表上的10个表联接在一起。然后,我可以使用10个不同的<resultMap>
标签将每个过滤器映射到TestCase
类中其相应的字段。
private List<Filter> myFilterA;
private List<Filter> myFilterB;
private List<Filter> myFilterC;
但是,我想将所有全部映射到一个单个字段,即List<Filter> filters
。我该怎么办?
答案 0 :(得分:2)
有可能,但是要将结果映射到单个public class MyPdfEventHandler: PdfPageEventHelper
{
protected List<PageIndex> Indice = new List<PageIndex>();
public override void OnStartPage(PdfWriter writer, Document document)
{
PageIndex pi = new PageIndex
{
Page = writer.CurrentPageNumber,
Name = "Name Example",
Text = "Text Example"
}
Indice.Add(pi);
}
}
中,您需要将结果连接到单个结果集中并使用List
。
例如,假设有两个过滤器表:
<discriminator />
映射器如下所示。
create table filter_a (
testcase_id int,
foo varchar(20)
);
create table filter_b (
testcase_id int,
bar int
);
请注意,我在查询中添加了<resultMap type="TestCase" id="testCaseRM">
<id column="testcase_id" />
<collection property="filters" resultMap="filterRM" />
</resultMap>
<resultMap type="java.lang.Object" id="filterRM">
<id column="filter_name" />
<discriminator javaType="string" column="filter_name">
<case value="a" resultType="FilterA">
<result column="foo" property="foo" />
</case>
<case value="b" resultType="FilterB">
<result column="bar" property="bar" />
</case>
</discriminator>
</resultMap>
<select id="selectAll" resultMap="testCaseRM">
select testcase_id, 'a' filter_name, foo, null bar from filter_a
union all
select testcase_id, 'b' filter_name, null foo, bar from filter_b
</select>
,以标识每一行的过滤器类型。
采用这种方法,由于filter_name
,查询可能会变得混乱。
最好执行10个单独的SELECT并在默认方法或服务层中手动构建UNION
。