现状描述:
超市销售商品时候,生成一个订单,一个订单中可能销售了一件或多件商品,查询销售数据的时候,我们使用嵌套查询来为订单加载商品销售明细(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部分就不赘述了。