首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何根据MyBatis中的列值动态选择resultMap

如何根据MyBatis中的列值动态选择resultMap
EN

Stack Overflow用户
提问于 2018-08-01 11:04:22
回答 1查看 1.8K关注 0票数 1

我有一个来自DB的resultSet,它返回两条记录,如下所示

代码语言:javascript
复制
TRANID Type Name Amount
1      B    ABC  100.00
1      S    XYZ  -100.00

以上数据表示涉及卖方和买方的交易。

现在我需要将上面的结果集映射到MyBatis,这样它就会以下面的结构返回一个事务对象。

代码语言:javascript
复制
Transaction :{
    id : 1,
    buyer:{
       name : "ABC",
       Amt : "100.00"
    },
    seller: {
       name: "XYZ",
       Amt: "-100.00"
    }
}

如果DB在一行中返回数据,并且买方和卖方数据都在一个维度中,例如

代码语言:javascript
复制
TRANID BNAME BAMOUNT SNAME SAMOUNT
1      ABC   100.00  XYZ   -100.00

然后,我可以使用如下所示的结果图

代码语言:javascript
复制
<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,比如

代码语言:javascript
复制
<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>

上面的结果映射将不起作用,因为为买方和卖方定义的相同列名和数据将被复制。

有什么建议吗。

提前谢谢。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51624822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档