【SSM-MyBatis框架】關聯查詢--一對多查詢
阿新 • • 發佈:2019-01-01
1.ResultMap:
1.需求: 查詢訂單及訂單明細
2.分析:
若使用resultType,則資訊就會造成重複:
但要求查詢資訊不能重複,
在order類中新增List<orderdetail>屬性。最終會將order對映到訂單中,orderdetail對映到list中,這樣就去重了。
3.pojo類:
public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; //使用者資訊 private User user; private List<Orderdetail> orderdetails;
4.mapper.xml:
<!-- 關聯查詢 查詢user,orders,orderdetail--> <select id="findOrdersResultMap" resultMap="orderAnduserAnddetail"> SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, <!-- 使用別名,因為這裡的id欄位與orders中的id欄位重複 --> orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, USER, orderdetail WHERE orders.user_id = user.id AND orders.id=orderdetail.orders_id </select> <!-- 配置關聯查詢orders表的resultmap --> <resultMap type="cn.edu.hpu.ssm.po.Orders" id="ordersMap"> <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"/> <association property="user" javaType="cn.edu.hpu.ssm.po.User"> <id column="user_id" property="id"/> <result column="username" property="username"/> <result column="sex" property="sex"/> <result column="address" property="address"/> </association> </resultMap> <resultMap type="cn.edu.hpu.ssm.po.Orders" id="orderAnduserAnddetail" extends="ordersMap"> <!-- order對映 --> <!-- user對映 --> <!-- orderdetail對映 --> <collection property="orderdetails" ofType="cn.edu.hpu.ssm.po.Orderdetail"> <id column="orderdetail_id" property="id"/> <result column="orders_id" property="ordersId"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> </collection> </resultMap>
collection:表示關聯查詢的結果集。
property: 表示關聯查詢的結果集對映到pojo的那個屬性中。
ofType : 指定關聯查詢的結果集對映的物件型別。
extends: 繼承以寫好的resultMap。
5.mapper.java介面:
/**
* 查詢三個表,一對多的對映查詢
*/
public List<Orders> findOrdersResultMap();
6.小結:
mybatis使用resultMap的collection將關聯查詢的多條記錄對映到一個list集合屬性中。
使用ResultType實現:
將訂單明細對映到orders中的orderdetails中,需要自己處理,使用雙重迴圈遍歷,去掉重複記錄,將訂單明細放在orderdetails中。