Mybatis中的延迟加载的使用方法
在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml
配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="com.taotao.store.order.mapper.OrderMapper">
<sqlid="tableName">tb_order</sql>
<resultMaptype="Order"id="pojoResultMap"autoMapping="true">
<idcolumn="order_id"property="orderId"/>
<associationproperty="orderShipping"javaType="OrderShipping"column="order_id"select="queryOrderShippingByOrderId"autoMapping="true"></association>
<collectionproperty="orderItems"javaType="Arraylist"ofType="OrderItem"autoMapping="true"select="queryOrderItemByOrderId"column="order_id">
</collection>
</resultMap>
<selectid="queryOrderItemByOrderId"resultType="OrderItem"parameterType="String">
SELECT * FROM tb_order_item WHERE order_id = #{orderId};
</select>
<selectid="queryOrderShippingByOrderId"resultType="OrderShipping"parameterType="String">
SELECT * FROM tb_order_shipping WHERE order_id = #{orderId};
</select>
<selectid="queryList"resultMap="pojoResultMap">
SELECT
*
FROM
<includerefid="tableName"/>
</select>
<selectid="queryByID"resultMap="pojoResultMap">
SELECT
*
FROM
<includerefid="tableName"/>
WHERE order_id = #{id};
</select>
<selectid="queryByWhere"parameterType="Where"resultMap="pojoResultMap">
SELECT
*
FROM
<includerefid="tableName"/>
WHERE ${where.column} ${where.operater} #{where.value} LIMIT 1;
</select>
<selectid="queryListByWhere"parameterType="Where"resultMap="pojoResultMap">
SELECT
*
FROM
<includerefid="tableName"/>
WHERE ${where.column} ${where.operater} #{where.value};
</select>
<insertid="save">
INSERT INTO <includerefid="tableName"/> VALUES (#{orderId},#{payment},#{paymentType},#{postFee},#{status},#{createTime},#{updateTime},#{paymentTime},#{consignTime},#{endTime},#{closeTime},#{shippingName},#{shippingCode},#{userId},#{buyerMessage},#{buyerNick},#{buyerRate});
INSERT INTO tb_order_item VALUES
<foreachcollection="orderItems"item="item"separator=",">
(#{item.itemId},#{orderId},#{item.num},#{item.title},#{item.price},#{item.totalFee},#{item.picPath})
</foreach>
;
INSERT INTO tb_order_shipping VALUES (#{orderId},#{orderShipping.receiverName},#{orderShipping.receiverPhone},#{orderShipping.receiverMobile},#{orderShipping.receiverState},#{orderShipping.receiverCity},#{orderShipping.receiverDistrict},#{orderShipping.receiverAddress},#{orderShipping.receiverZip},NOW(),NOW());
</insert>
<updateid="update">
UPDATE <includerefid="tableName"/>
<set>
<iftest="payment !=null and payment != ''">
payment = #{payment},
</if>
<iftest="postFee !=null and postFee != ''">
post_fee = #{postFee},
</if>
<iftest="status !=null and status != ''">
status = #{status},
</if>
<iftest="updateTime !=null and updateTime != ''">
update_time = #{updateTime},
</if>
<iftest="paymentTime !=null and paymentTime != ''">
payment_time = #{paymentTime},
</if>
<iftest="consignTime !=null and consignTime != ''">
consign_time = #{consignTime},
</if>
<iftest="endTime !=null and endTime != ''">
end_time = #{endTime},
</if>
<iftest="closeTime !=null and closeTime != ''">
close_time = #{closeTime},
</if>
<iftest="shippingName !=null and shippingName != ''">
shipping_name = #{shippingName},
</if>
<iftest="shippingCode !=null and shippingCode != ''">
shipping_code = #{shippingCode},
</if>
<iftest="buyerMessage !=null and buyerMessage != ''">
buyer_message = #{buyerMessage},
</if>
<iftest="buyerRate !=null and buyerRate != ''">
buyer_rate = #{buyerRate},
</if>
</set>
WHERE order_id = #{orderId};
</update>
<deleteid="deleteByID"parameterType="Long">
DELETE FROM <includerefid="tableName"/> WHERE order_id = #{orderId};
DELETE FROM tb_order_item WHERE order_id = #{orderId};
</delete>
<deleteid="deleteByIDS"parameterType="list">
DELETE FROM <includerefid="tableName"/> WHERE order_id IN
<foreachcollection="ids"item="id"open="("close=")"separator=",">
#{id}
</foreach>;
DELETE FROM tb_order_item WHERE order_id IN
<foreachcollection="ids"item="id"open="("close=")"separator=",">
#{id}
</foreach>;
</delete>
<updateid="paymentOrderScan"parameterType="Date">
UPDATE tb_order SET
status = 6,
update_time = NOW(),
close_time = NOW(),
end_time = NOW()
WHERE status = 1 AND payment_type = 1 AND create_time <= #{date}
</update>
</mapper>
其中此代表延迟加载
<resultMaptype="Order"id="pojoResultMap"autoMapping="true">
<idcolumn="order_id"property="orderId"/>
<associationproperty="orderShipping"javaType="OrderShipping"column="order_id"select="queryOrderShippingByOrderId"autoMapping="true"></association>
<collectionproperty="orderItems"javaType="Arraylist"ofType="OrderItem"autoMapping="true"select="queryOrderItemByOrderId"column="order_id">
</collection>
</resultMap>
调用方法:
http://order.taotao.com/order/query/31537859410409
返回数据JSON
{
"orderId":"31537859410409",
"payment":"5288",
"paymentType":null,
"postFee":"0",
"status":1,
"createTime":1537859410000,
"updateTime":1537859410000,
"paymentTime":null,
"consignTime":null,
"endTime":null,
"closeTime":null,
"shippingName":null,
"shippingCode":null,
"userId":3,
"buyerMessage":null,
"buyerNick":"zhang123",
"buyerRate":0,
"orderItems":[
{
"itemId":9,
"orderId":"31537859410409",
"num":1,
"title":"苹果(Apple)iPhone 6 (A1586) 16GB 金色 移动联通电信4G手机3",
"price":5288,
"totalFee":5288,
"picPath":"http://image.taotao.com/images/2015/03/06/2015030610045320609720.jpg"
}
],
"orderShipping":{
"orderId":"31537859410409",
"receiverName":"张志君",
"receiverPhone":"",
"receiverMobile":"15800000000",
"receiverState":"上海",
"receiverCity":"上海",
"receiverDistrict":"闵行区",
"receiverAddress":"三鲁公路3279号 明浦广场 3号楼 205室",
"receiverZip":"200000",
"created":1537859410000,
"updated":1537859410000
}
}