我有一个来自DB的resultSet,它返回两条记录,如下所示
TRANID Type Name Amount
1 B ABC 100.00
1 S XYZ -100.00
以上数据表示涉及卖方和买方的交易。
现在我需要将上面的结果集映射到MyBatis,这样它就会以下面的结构返回一个事务对象。
Transaction :{
id : 1,
buyer:{
name : "ABC",
Amt : "100.00"
},
seller: {
name: "XYZ",
Amt: "-100.00"
}
}
如果DB在一行中返回数据,并且买方和卖方数据都在一个维度中,例如
TRANID BNAME BAMOUNT SNAME SAMOUNT
1 ABC 100.00 XYZ -100.00
然后,我可以使用如下所示的结果图
<resultMap id="transactionRM" type="Transaction">
<id property="id" column="TRANID"/>
<association property="buyer" type="User">
<result property="name" column="BNAME"/>
<result propert="amt" column="BAMT"/>
</association>
<association property="seller" type="User">
<result property="name" column="SNAME"/>
<result propert="amt" column="SAMT"/>
</association>
</resultMap>
我将能够实现我想要的,因为我对买方和卖方有唯一的别名/列名。
但是,如果结果出现在两行中,其中一行是买方和卖方,而type是确定该行属于卖方还是买方的鉴别器,我如何才能获得相同的结果。
我尝试为用户定义一个resultMap,比如
<resultMap id ="buyerRM" type ="User">
<result property="name" column="Name"/>
<result property="amt" column="Amount"/>
</resultMap>
<resultMap id ="sellerRM" type ="User">
<result property="name" column="Name"/>
<result property="amt" column="Amount"/>
</resultMap>
<resultMap id="transacionRM" type="Transaction">
<association property="buyer" resultMap="buyerRM" type="User"/>
<association property="seller" resultMap="sellerRM" type="User">
</resultMap>
上面的结果映射将不起作用,因为为买方和卖方定义的相同列名和数据将被复制。
有什么建议吗。
提前谢谢。
https://stackoverflow.com/questions/51624822
复制相似问题