Mybatis實體關聯對映
原文源自:https://blog.csdn.net/Daybreak1209/article/details/51815753
一、一對一
1、resultType返回型別:使用resultType返回相對簡單,查詢擴充套件類屬性時,建立擴充套件類。
2、resultMap返回型別:使用resultMap首先需要將1:1關聯實體例如訂單關聯查詢使用者是一對一關係,所以在Order實體中新增單個User物件儲存關聯查詢的使用者資訊。
1)Order Pojo中新增private User user;
2)定義resultMap
需要關聯查詢對映的是使用者資訊,使用association將使用者資訊對映到訂單物件的使用者屬性中。
<!-- 訂單資訊resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userordermap">
<!-- 這裡的id,是mybatis在進行一對一查詢時將user欄位對映為user物件時要使用,必須寫 -->
<id property="id" column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<association property="user" javaType="cn.itcast.mybatis.po.User">
<!-- 這裡的id為user的id,如果寫上表示給user的id屬性賦值 -->
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
</resultMap>
association:表示進行關聯查詢單條記錄
property:表示關聯查詢的結果儲存在cn.itcast.mybatis.po.Orders的user屬性中
javaType:表示關聯查詢的結果型別
<id property="id" column="user_id"/>:查詢結果的user_id列對應關聯物件的id屬性,這裡是<id />表示user_id是關聯查詢物件的唯一標識。
<result property="username" column="username"/>:查詢結果的username列對應關聯物件的username屬性。
3)Mapper對映
<select id="findOrdersListResultMap" resultMap="userordermap">
SELECT
orders.*,
user.username,
user.address
FROM
orders, user
WHERE orders.user_id = user.id
</select>
4)mapper.java介面
public List<Orders> findOrdersListResultMap() throws Exception;
5)測試
Public void testfindOrdersListResultMap()throws Exception{
//獲取session
SqlSession session = sqlSessionFactory.openSession();
//獲限mapper介面例項
UserMapper userMapper = session.getMapper(UserMapper.class);
//查詢訂單資訊
List<Orders> list = userMapper.findOrdersList2();
System.out.println(list);
//關閉session
session.close();
}
二、一對多
例如根據訂單查詢訂單詳情關聯資訊order 與OrderDetail類
1、Order 實體中新增OrderDetail的List實體集
在Orders類中加入List<Orderdetail> orderdetails屬性
2、定義ResultMap
<!-- 訂單資訊resultmap -->
<resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap">
<id property="id"column="id"/>
<result property="user_id" column="user_id"/>
<result property="number" column="number"/>
<association property="user" javaType="cn.itcast.mybatis.po.User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<result property="address" column="address"/>
</association>
<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
<id property="id" column="orderdetail_id"/>
<result property="items_id" column="items_id"/>
<result property="items_num" column="items_num"/>
</collection>
</resultMap>
resultMap的繼承:
如果應用到User的實體關聯查詢,上邊一對一查詢訂單及使用者資訊定義的resultMap相同,可以省去association關聯,將使用者中定義的resultMap直接套用繼承,優化如下:
<resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap" extends="userordermap">
<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
<id property="id" column="orderdetail_id"/>
<result property="items_id" column="items_id"/>
<result property="items_num" column="items_num"/>
</collection>
</resultMap>
//使用extends="userordermap" 繼承userodermap
3、Mapper對映
<select id="findOrdersDetailList" resultMap="userorderdetailmap">
SELECT
orders.*,
user.username,
user.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num
FROM orders,user,orderdetail
WHERE orders.user_id = user.id
AND orders.id = orderdetail.orders_id
</select>
總結:使用collection完成一對多關聯查詢,將關聯查詢資訊對映到集合物件。
三、多對多
在Mybaits中,一對多查詢是多對多查詢的特例,1:n中使用一個collectin元素完成關聯對映,而n:n中使用collection巢狀,表示多條記錄對映到多條查詢。例如使用者關聯訂單、訂單詳情、商品資訊。
1、pojo擴充套件
在User中新增List<Orders> orders 屬性,在Orders類中加入List<Orderdetail> orderdetails屬性
2、定義ResultMap
<resultMap type="cn.itcast.mybatis.po.User" id="userOrderListResultMap">
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<collection property="orders" ofType="cn.itcast.mybatis.po.Orders">
<id column="id" property="id"/>
<result property="number" column="number"/>
<collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
<id column="orderdetail_id" property="id"/>
<result property="ordersId" column="id"/>
<result property="itemsId" column="items_id"/>
<result property="itemsNum" column="items_num"/>
<association property="items" javaType="cn.itcast.mybatis.po.Items">
<id column="items_id" property="id"/>
<result column="items_name" property="name"/>
<result column="items_detail" property="detail"/>
</association>
</collection>
</collection>
</resultMap>
在訂單collection中新增訂單詳情collection表示訂單與訂單詳情的多對多關係。
相關文章
- mybatis關聯關係對映MyBatis
- MyBatis實現一對一關聯對映MyBatis
- day07-MyBatis的關聯對映01MyBatis
- Hibernate 實體關聯關係對映—-總結薦
- JavaEE MyBatis關聯對映之多對多(教材學習筆記)JavaMyBatis筆記
- JPA關係對映系列四:many-to-many 關聯對映
- mybatis 實體類排除資料庫欄位對映MyBatis資料庫
- mybatis 一對一關聯MyBatis
- Hibernate 的關聯關係對映
- Mybatis結果對映MyBatis
- MyBatis學習筆記(2)—對映關係篇MyBatis筆記
- hibernate之關於使用連線表實現多對一關聯對映
- Mybatis 基礎xml對映MyBatisXML
- MyBatis3:SQL對映MyBatisS3SQL
- MyBatis加強(1)~myBatis物件關係對映(多對一關係、一對多關係)、延遲/懶載入MyBatis物件
- MapStruct實體對映Struct
- hibernate 關係對映之 主鍵關聯一對一
- 淺談Mybatis中是如何實現這種多表關係的對映MyBatis
- JPA關係對映系列五:many-to-many 關聯表存在額外欄位關係對映
- Mybatis【15】-- Mybatis一對一多表關聯查詢MyBatis
- MyBatis從入門到精通(九):MyBatis高階結果對映之一對一對映MyBatis
- MyBatis從入門到精通(十一):MyBatis高階結果對映之一對多對映MyBatis
- Mybatis對映檔案簡介MyBatis
- MyBatis 結果對映總結MyBatis
- mybatis高階結果對映MyBatis
- Mybatis 輸出對映-- resultType resultMapMyBatis
- Mybatis學習筆記(5)-高階對映之多對多對映MyBatis筆記
- UI與實體的對映UI
- MyBatis(四) 對映器配置(自動對映、resultMap手動對映、引數傳遞)MyBatis
- MyBatis表關聯 一對多 多對一 多對多MyBatis
- MyBatis初級實戰之五:一對一關聯查詢MyBatis
- MyBatis初級實戰之六:一對多關聯查詢MyBatis
- Mybatis學習筆記(4)-高階對映之一對多對映MyBatis筆記
- Mybatis學習筆記(3)—高階對映之一對一對映MyBatis筆記
- Spring Boot 入門系列(二十八) JPA 的實體對映關係,一對一,一對多,多對多關係對映!Spring Boot
- Mybatis處理列名—欄位名對映— 駝峰式命名對映MyBatis
- mybatis入門基礎(四)----輸入對映和輸出對映MyBatis
- 『手寫Mybatis』實現對映器的註冊和使用MyBatis