mybatis高级结果映射collection

15 篇文章 0 订阅

现状描述:

超市销售商品时候,生成一个订单,一个订单中可能销售了一件或多件商品,查询销售数据的时候,我们使用嵌套查询来为订单加载商品销售明细(ERPSaleDetail类)。

具体使用:

一、在订单实体中加入商品销售明细属性:

public class ERPSaleData  {

private String orderId;

。。。。。

private List<ERPSaleDetail> erpSaleDetails;  //引入商品销售明细实体类

getter/setter

二、在mapper xml文件中的 <resultMap>标签中加入

<collection property="erpSaleDetails" column="order_id"
    ofType="com.mw.mbox.common.erp.model.ERPSaleDetail"
 select="getERPSaleDetailByOrderId"   fetchType="lazy" javaType="ArrayList">
    </collection>

其中property是加入ERPSaleData实体类中的属性,  select是查询销售明细的sql引用,column的值是要传入到引用sql中的查询条件(注意,此处的值是列名,不是Java中的属性名),

“ofType”属性用来区分JavaBean(或字段)属性类型和集合包含的类型,fetchType="lazy",懒加载,只有在需要的时候才会去加载商品销售明细的相关信息,

javaType="ArrayList" 是可缺省,因为 MyBatis 在很多情况下会为你算出来。

加入ERPSaleDetail类的映射关系配置

<resultMap id="ERPSaleDetailResultMap" type="com.mw.mbox.common.erp.model.ERPSaleDetail">
  <id column="uid" property="uid" jdbcType="OTHER" />
    <result column="goods_id" property="goodsId" jdbcType="VARCHAR" />
   
。。。。
  </resultMap>

三、查询订单信息sql语句:

<select id="selectERPSaleDatas" resultMap="BaseResultMap" parameterType="com.mw.mbox.common.erp.model.ERPSaleData">
  SELECT
* FROM erp_sale_data s

<where>

    <if test="custId != null">
       s.cust_id = #{custId,jdbcType=BIGINT}
    </if>

<!-- 其他查询条件 -->

    </where>
  </select>

查询商品销售明细sql语句:

<select id="getERPSaleDetailByOrderId" resultMap="ERPSaleDetailResultMap" parameterType="java.lang.String" >
  select
*  from erp_sale_detail where order_id = #{orderId,jdbcType=VARCHAR}
  </select>

Java部分就不赘述了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值