7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)
視頻地址:http://edu.51cto.com/sd/be679
在Mybatis中的管理表查詢這里主要介紹的是一對一和一對多的關(guān)聯(lián)查詢的resultMap的管理配置查詢,當(dāng)然你也可以用包裝類來實現(xiàn)。不過這里不說,做關(guān)聯(lián)查詢的步驟可以簡單的總結(jié)為以下的幾步:
1.分析出表和表之間的關(guān)聯(lián)關(guān)系
2.Sql語句的寫法
3.在實體類中把附表的信息添加到主查詢表中
4.配置resulMap
配置你主要查詢表的信息
配置你關(guān)聯(lián)表的信息
這里我先給出幾個表的字段和關(guān)系,以三張表為例(用戶表:users,訂單表:orders,訂單詳情表:orderDetail)大概字段如下:
Users
Userid
Uname
Upassword
Usex
Orders
Orderid
Userid(外鍵指向用戶表)
Order_unmber
createTime
address
Orderdetail
Orderdetailid
Orderid (外鍵指向訂單表)
Num?
這三張表的關(guān)系簡單的可以說成如下關(guān)系:
用戶表-->訂單表 ? 是一對一的關(guān)系
訂單表-->訂單詳情表? 是一對多的關(guān)系
一.這里先來看一下Mybatis中對于一對一關(guān)系的實現(xiàn)(以用戶表和訂單表舉例):
這里的一個需求是:查詢訂單表的所有信息和用戶名
1.SQL語句:
SELECT t_orders.* ,t_user.uname as 用戶名
FROM t_orders,t_user?
where t_orders.userid=t_user.userid
結(jié)果:
2.主要查詢的訂單信息(主要查詢表),所有在訂單中添加User的對象
private Users user;//在訂單表中關(guān)聯(lián)用戶表的屬性,get,set別忘記3.配置一個resultMap
<resultMap?type="com.etc.entity.Orders"?id="ordersResultMap">
<!-- 配置你主要查詢表的信息 -->
<id?column="orderid"?property="orderid"/>
<result?column="userid"?property="userid"/>
<result?column="order_number"?property="order_number"/>
<result?column="createtime"?property="createTime"/>
<result?column="address"?property="address"/>
<!-- 配置關(guān)聯(lián)表的信息 -->
<!--
association:配置一對一關(guān)聯(lián)表的信息
property:主表中匹配關(guān)聯(lián)表的那個屬性
javaType:該屬性的全路徑(包+類名)
?-->
<association?property="user"?javaType="com.etc.entity.User">
<id?column="userid"?property="userid"/>
<result?column="uname"?property="uname"/>//如果還有查詢別的信息只要配置column即可
</association>
</resultMap>
調(diào)用:
<select id="findByOrderUser" resultMap="ordersResultMap">SELECT t_orders.* ,t_user.uname as 用戶名FROM t_orders,t_user where t_orders.userid=t_user.userid</select>二.多對多關(guān)聯(lián)表的實現(xiàn)(多對多的實現(xiàn)原理和一對一的類型,所以不多做解釋,直接貼代碼)
1.Sql語句:(查詢的訂單表的全部信息和訂單詳情表的ID和數(shù)量)
SELECT t_orders.*,t_orderdetail.orderdetailid,t_orderdetail.num
?FROM t_orders,t_orderdetail
WHERE t_orderdetail.orderid=t_orders.orderid
結(jié)果:(從這個結(jié)果可以看出來,一個訂單可以對應(yīng)對個訂單詳細的記錄)
分析:這里的主要查詢對象還是訂單表,所以要在訂單表中加入訂單詳情的對象
2.主要查詢的訂單信息(主要查詢表),所有在訂單中添加OrderDetail的對象(并且要放在集合中)
private List<OrderDetail> orderDetail;//get set 別忘記?3.配置一個resultMap(一對多使用collection)
<resultMap?type="com.etc.entity.Orders"?id="orderResultMap">
<!-- 配置 要映射的訂單信息-->
<id?column="orderid"?property="orderid"/>
<result?column="userid"?property="userid"/>
<result?column="order_number"?property="order_number"/>
<result?column="createtime"?property="createTime"/>
<result?column="address"?property="address"/>
<!-- 關(guān)聯(lián)表的映射信息 -->
<!--
collection:對應(yīng)查詢出來的結(jié)果有多條的映射記錄
property:對應(yīng)的主表中添加的關(guān)聯(lián)表的那個屬性
ofType:就相當(dāng)于是一對一中的javaType
?-->
<collection?property="orderDetail"?ofType="com.etc.entity.OrderDetail">
<id?column="orderdetailid"?property="orderdetailid"/>
<result?column="num"??property="num"/>
</collection>
</resultMap>
?
總結(jié):
一對一和一對多的配置原理都很類型,主要就是通過配置resultMap
一對一關(guān)聯(lián)表配置assocation,用javaType指定關(guān)聯(lián)表類型
一對多關(guān)聯(lián)表配置collection,ofType指定關(guān)聯(lián)表類型
轉(zhuǎn)載于:https://www.cnblogs.com/huaixiaoz/p/5799705.html
總結(jié)
以上是生活随笔為你收集整理的7.Mybatis关联表查询(这里主要讲的是一对一和一对多的关联查询)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS 转换数字为大写
- 下一篇: 雷军:小米MIX Fold 2搭载自研微