標籤: mybatis前端
[TOC]java
本文實現多對多查詢,查詢用戶及用戶購買商品信息。git
查詢主表是:用戶表github
關聯表:因爲用戶和商品沒有直接關聯,經過訂單和訂單明細進行關聯,因此關聯表:orders、orderdetail、itemssql
SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id, items.name items_name, items.detail items_detail, items.price items_price FROM orders, user, orderdetail, items WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id
將用戶信息映射到user中。mybatis
在user類中添加訂單列表屬性List<Orders> orderslist
,將用戶建立的訂單映射到orderslistapp
在Orders中添加訂單明細列表屬性List<OrderDetail>orderdetials
,將訂單的明細映射到orderdetials學習
在OrderDetail中添加Items
屬性,將訂單明細所對應的商品映射到Items網站
<!-- 查詢用戶及購買的商品信息,使用resultmap --> <select id="findUserAndItemsResultMap" resultMap="UserAndItemsResultMap"> SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id, items.name items_name, items.detail items_detail, items.price items_price FROM orders, user, orderdetail, items WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id AND orderdetail.items_id = items.id </select>
<!-- 查詢用戶及購買的商品 --> <resultMap type="com.iot.mybatis.po.User" id="UserAndItemsResultMap"> <!-- 用戶信息 --> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> <!-- 訂單信息 一個用戶對應多個訂單,使用collection映射 --> <collection property="ordersList" ofType="com.iot.mybatis.po.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createtime"/> <result column="note" property="note"/> <!-- 訂單明細 一個訂單包括 多個明細 --> <collection property="orderdetails" ofType="com.iot.mybatis.po.Orderdetail"> <id column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> <!-- 商品信息 一個訂單明細對應一個商品 --> <association property="items" javaType="com.iot.mybatis.po.Items"> <id column="items_id" property="id"/> <result column="items_name" property="name"/> <result column="items_detail" property="detail"/> <result column="items_price" property="price"/> </association> </collection> </collection> </resultMap>
//查詢用戶購買商品信息 public List<User> findUserAndItemsResultMap()throws Exception;
將查詢用戶購買的商品信息明細清單,(用戶名、用戶地址、購買商品名稱、購買商品時間、購買商品數量).net
針對上邊的需求就使用resultType將查詢到的記錄映射到一個擴展的pojo中,很簡單實現明細清單的功能。
一對可能是多對多的特例,以下需求:
查詢用戶購買的商品信息,用戶和商品的關係是多對多關係。
查詢字段:用戶帳號、用戶名稱、用戶性別、商品名稱、商品價格(最多見)
企業開發中常見明細列表,用戶購買商品明細列表,
使用resultType將上邊查詢列映射到pojo輸出。
查詢字段:用戶帳號、用戶名稱、購買商品數量、商品明細(鼠標移上顯示明細)
使用resultMap將用戶購買的商品明細列表映射到user對象中。
總結:
使用resultMap是針對那些對查詢結果映射有特殊要求的功能,好比特殊要求映射成list中包括多個list。
resultType
resultMap
使用association和collection完成一對一和一對多高級映射(對結果有特殊的映射要求)。
association:
使用resultType沒法將查詢結果映射到pojo對象的pojo屬性中,根據對結果集查詢遍歷的須要選擇使用resultType仍是resultMap。
collection: