框架学习系列 mybatis 第二十篇 电商项目中多对多映射

框架学习系列 mybatis 第二十篇 电商项目中多对多映射

凯哥Java 凯哥java
本节主要内容
1:多对多映射
2:总结&下节预告
3:凯哥说一说
本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第二十篇 多对多映射
声明:本文系凯哥Java(www.kaigejava.com)原创,未经容许,禁止转载!
一:多对多
1.1:什么是多对多?
多对多映射其实就是一对多映射的一种特列。
1.2:需求
在电商项目中,查询用户信息的时候,关联查询出该用户购买的商品信息
回顾我们将的四个表:订单表(orders)、订单明细表(orderdetail)、商品表(items)、用户表(user)
表与表之间的关系:
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
分析需求:
主表是什么?从表又是什么?
主表:查询用户信息,因此主表是用户表(user)
从表:购买商品信息。商品是在不一样订单中,而每一个订单也不一样
因此,从表就是 商品表(items)、订单表(orders)、订单详情表(orderdetail)
分析清楚主表、从表后,在根据上图中,表与表之间关系,咱们能够获得以下sql:java

SELECT 
 orders.`id`,
 orders.`user_id`,
 orders.`number`,
 user.`username`,
 user.`sex`,
 orderdetail.`id` detailId,
 orderdetail.`items_id`,
 orderdetail.`items_num`,
 items.`name`,
 items.`price` 
FROM
 orders,
 USER,
 orderdetail,
 items 
WHERE orders.`user_id` = user.`id` 
 AND orders.`id` = orderdetail.`orders_id` 
 AND orderdetail.`items_id` = items.`id`

框架学习系列 mybatis 第二十篇 电商项目中多对多映射
1.2:修改PO类
a:根据分析,咱们知道主表是在user表。
因此,咱们修改user表pojo扩展类。用户与订单是一对多关系,因此,添加list<Orders>
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
b:订单(orders)表与订单详情表(orderdetail)是一对多关系,因此在Orders表的实体对象中扩展
出List<Orderdetail> detailList
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
c:订单详情表(orderdetail)与商品表是一对一的关系。因此同理,在ordedetail的po对象中扩展出存放items对象的字段:
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
1.3:order-mapper.xml文件中
a:回忆一对一映射使用什么标签进行声明?
b:回忆一对多映射使用什么标签进行声明?
声明返回resultMap:
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
代码:sql

<!-- 
多对多映射 示例中:
定义:reusltMap
表关系:
用户与订单:一对多关系
 订单与订单明细:一对多关系
 订单明细与商品信息:一对一关系
 -->
 <resultMap type="com.kaigejava.mybatis2.pojo.User" id="UserAndItemsRstMap">
    <!-- 声明用户信息的 -->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<!-- 声明查询订单表中信息(用户与订单是一对多关系) 
一对多关系使用:collection进行声明
-->
<collection property="orders" ofType="com.kaigejava.mybatis2.pojo.Orders">
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<!-- 声明订单明细信息(订单与订单详情是一对多关系)
一对多关系使用:collection进行声明
 -->
<collection property="detailIst" ofType="com.kaigejava.mybatis2.pojo.Orderdetail">
<id column="detailId" property="id"/>
<result column="items_id" property="itemsId"/>
<result column="items_num" property="itemsNum"/>
<!-- 商品详情(订单详情与商品是一对一关系的)
一对一关系使用:association 进行声明
-->
<association property="items" javaType="com.kaigejava.mybatis2.pojo.Items">
<id column="items_id" property="id"/>
<result column="name" property="name"/>
<result column="price" property="price"/>
</association>
</collection>
</collection>
 </resultMap>

查询主语句:
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
1.4:测试类型
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
运行结果:
框架学习系列 mybatis 第二十篇 电商项目中多对多映射
二:总结
经过本文学习,咱们须要掌握:
1:学会根据需求,分析出对应表及表之间关系进而先写出sql语句。
2:知道什么是多对多关系。
3:学会一对多,一对一嵌套使用。来实现咱们不一样的需求
凯哥说一说:
凯哥但愿各位看官老爷们,多提提意见。有时候,或许您们看不到个人回复,可是我会认真看每一个人的意见的。会在相应文章中给出解答的。
下节预告:
延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在须要的时候,再去加载从信息。
下节咱们学习:延迟加载mybatis

相关文章
相关标签/搜索