mybatis多表查询(一个实体包含其他对象)

场景重现:
top_trans_order 订单表中是一笔交易的核心数据
top_trans_extend 订单拓展表中存储该笔交易的附加信息

需求:展示当前订单的全部信息 则必须获取交易拓展表中该笔交易的相关数据

解决方法:
Order 实体类包含它自身的所有字段属性,与此同时还要把交易拓展实体当做订单实体的属性
例如
一、实体类写法

1
2
3
4
5
6
7
8
9
10
11
12
13
@Data
public class TopTransOrder {
private Long id;
private String ordId;
private String sourceRegionId;
private String regionId;
private String routeRegionId;
private String productId;
private String reqDate;
....... 多个字段
// 交易拓展信息实体 topTransExtend必须与xml中的property属性值相同
private TopTransExtend topTransExtend;
}

二、mybatis映射器.xml写法
resultMap=”transExtendMap” 为拓展实体的map对应的ID

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<resultMap id="BaseResultMap" type="类Order全路径">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="ord_id" jdbcType="VARCHAR" property="ordId" />
<result column="source_region_id" jdbcType="VARCHAR" property="sourceRegionId" />
<result column="region_id" jdbcType="VARCHAR" property="regionId" />
<result column="route_region_id" jdbcType="VARCHAR" property="routeRegionId" />
<result column="product_id" jdbcType="VARCHAR" property="productId" />
<result column="req_date" jdbcType="CHAR" property="reqDate" />
....................多个字段映射
<collection property="topTransExtend" resultMap="transExtendMap"/>
</resultMap>
// 拓展表的map映射
<resultMap id="transExtendMap" type="com.huifu.toprs.top.entity.TopTransExtend">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="hb_fq_num" jdbcType="INTEGER" property="hbFqNum" />
<result column="hb_fq_seller_percent" jdbcType="INTEGER" property="hbFqSellerPercent" />
</resultMap>

三、sql写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<sql id="getTransOrderData">
SELECT
a.*,b.hb_fq_num,b.hb_fq_seller_percent
FROM
top_trans_order a
LEFT JOIN
top_trans_extend b
ON
a.ord_id = b.ord_id
</sql>
//查交易表的所有信息 交易拓展表中的部分字段
<select id="selectCashTransId" parameterType="java.lang.String" resultMap="BaseResultMap">
<include refid="getTransOrderData"/>
where cash_trans_id = #{cashTransId,jdbcType=VARCHAR}
</select>

这样就可以获得一个Order实体 包含交易表中信息和拓展表中想要的字段信息

坚持原创技术分享,您的支持将鼓励我继续创作!