我有一个简单的 spring 批处理程序,它从数据库表中读取并使用下面的默认 XStreamMarshaller 编写器类形成输出 XML
org.springframework.oxm.xstream.XStreamMarshaller
我从中读取输入的数据库表 TOY 包含两列:TOY_NAME、TOY_COLOR
对于单个玩具,可能有多个不同颜色的条目。
例如对于 TOY CAR 和 TOY BUS,数据库条目如下:
TOY_NAME | TOY_COLOR
--------------------------
CAR | RED
CAR | YELLOW
CAR | BLUE
BUS | RED
BUS | YELLOW
--------------------------
将传递给 ROW MAPPER 的结果集将是 5 行,每行有两列,即。玩具名称和颜色。
我的 java 域对象由一个包含 TOY 对象列表的主要对象 TOYS 组成。
TOY 对象本身包含两个字段,即。toyName 和字符串 toyColor 的列表。
我的输出 XML 具有简单的读写配置如下:
<TOYS>
<TOY>
<NAME>CAR</NAME>
<COLORS>
<COLOR>RED</COLOR>
</COLORS>
</TOY>
<TOY>
<NAME>CAR</NAME>
<COLORS>
<COLOR>YELLOW</COLOR>
</COLORS>
</TOY>
<TOY>
<NAME>CAR</NAME>
<COLORS>
<COLOR>BLUE</COLOR>
</COLORS>
</TOY>
<TOY>
<NAME>BUS</NAME>
<COLORS>
<COLOR>RED</COLOR>
</COLORS>
</TOY>
<TOY>
<NAME>BUS</NAME>
<COLORS>
<COLOR>BLUE</COLOR>
</COLORS>
</TOY>
</TOYS>
从上面可以清楚地看出,对于结果集的每一行,都会创建一个单独的 TOY 节点。
但是,我希望输出如下:
<TOYS>
<TOY>
<NAME>CAR</NAME>
<COLORS>
<COLOR>RED</COLOR>
<COLOR>YELLOW</COLOR>
<COLOR>BLUE</COLOR>
</COLORS>
</TOY>
<TOY>
<NAME>BUS</NAME>
<COLORS>
<COLOR>RED</COLOR>
<COLOR>BLUE</COLOR>
</COLORS>
</TOY>
</TOYS>
也就是说 - 对于每个玩具,应该只创建一个包含该特定玩具的所有颜色的玩具节点。
如何根据我拥有的结果集在我的 READER(或 ROW MAPPER)中处理此要求?
有没有办法调整我的阅读器 sql 以满足上述情况?
我当前的 sql(生成第一个 xml)是:
SELECT TOY_NAME, TOY_COLOR FROM TOY ORDER BY TOY_NAME
谢谢阅读!