凯哥Java 凯哥java
本节主要内容
1:多对多映射
2:总结&下节预告
3:凯哥说一说
本文是《凯哥陪你学系列-框架学习之mybatis框架学习》中第二十篇 多对多映射
声明:本文系凯哥Java(www.kaigejava.com)原创,未经容许,禁止转载!
一:多对多
1.1:什么是多对多?
多对多映射其实就是一对多映射的一种特列。
1.2:需求
在电商项目中,查询用户信息的时候,关联查询出该用户购买的商品信息
回顾我们将的四个表:订单表(orders)、订单明细表(orderdetail)、商品表(items)、用户表(user)
表与表之间的关系:
分析需求:
主表是什么?从表又是什么?
主表:查询用户信息,因此主表是用户表(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`
1.2:修改PO类
a:根据分析,咱们知道主表是在user表。
因此,咱们修改user表pojo扩展类。用户与订单是一对多关系,因此,添加list<Orders>
b:订单(orders)表与订单详情表(orderdetail)是一对多关系,因此在Orders表的实体对象中扩展
出List<Orderdetail> detailList
c:订单详情表(orderdetail)与商品表是一对一的关系。因此同理,在ordedetail的po对象中扩展出存放items对象的字段:
1.3:order-mapper.xml文件中
a:回忆一对一映射使用什么标签进行声明?
b:回忆一对多映射使用什么标签进行声明?
声明返回resultMap:
代码: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>
查询主语句:
1.4:测试类型
运行结果:
二:总结
经过本文学习,咱们须要掌握:
1:学会根据需求,分析出对应表及表之间关系进而先写出sql语句。
2:知道什么是多对多关系。
3:学会一对多,一对一嵌套使用。来实现咱们不一样的需求
凯哥说一说:
凯哥但愿各位看官老爷们,多提提意见。有时候,或许您们看不到个人回复,可是我会认真看每一个人的意见的。会在相应文章中给出解答的。
下节预告:
延迟加载又叫懒加载,也叫按需加载。也就是说先加载主信息,在须要的时候,再去加载从信息。
下节咱们学习:延迟加载mybatis