MyBatis进阶中,关于关联查询有些疑问。

MyBatis进阶中,关于关联查询有些疑问。

1、关联查询1:n,对象放在1的一边,那1:1、n:m放在那边呢?

package com.imooc.mybatis.entity;

import java.util.List;

public class Goods {
private Integer goodsId;//商品编号
  private String title;//标题
  private String subTitle;//子标题
  private Float originalCost;//原始价格
  private Float currentPrice;//当前价格
  private Float discount;//折扣率
  private Integer isFreeDelivery;//是否包邮,1-包邮 0-不包邮
  private Integer categoryId;//分类编号
  private List<GoodsDetail> goodsDetails;

2、关联查询为什么resultMap不用写goods表中的其他字段了?

<resultMap id="rmGoods1" type="com.imooc.mybatis.entity.Goods">
<!--映射goods对象的主键到goods_id字段-->
   <id column="goods_id" property="goodsId"></id>
<!--
       collection的含义是,在
       select * from  t_goods limit 0,1 的到结果后,对所有Goods对象遍历得到goods_id字段值,
       并代入goodsDetail命名空间的findByGoodsId的SQL中执行查询,
       将得到的"商品详情"集合赋值给goodsDetail List对象.
   -->
   <collection property="goodsDetails" select="goodsDetail.selectByGoodsId"
               column="goods_id"/>
</resultMap>
<select id="selectOneToMany" resultMap="rmGoods1">
select * from t_goods limit 0,1
</select>

3、关联查询是不是和之前多表查询一个意思,如果是,直接多表不是更方便吗?


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,1、一对一的查询,将对应的字段和属性一一对应就可以。

  多对多查询是可以使用一对多的方式进行查询,其实多对多的本质就是多个一对多,所以一般使用一对多就可以完成多对多的查询,通常情况下我们会创建一张关联的表来实现这个关联关系。

    ​2、这里是书写关联查询的内容,通过这里goods_id来对应执行查找GoodsDetail对象,所以需要书写goods_id这个字段

https://img1.sycdn.imooc.com//climg/614c234509c18d1108080428.jpg

而goods表中的其他字段可以忽略不写,因为如果数据库字段和实体类属性一致或者符合驼峰命名转换时,也会自动对应,不写也可以正确对应。

    ​3、关联查询可以理解为两个表通过主外键在一条sql中完成所有数据的提取,比如,通过左连接来关联两个表在一条sql语句中书写查询,而多表级联查询可以理解为通过一个对象来获取与它关联的另外一个对象,执行的sql语句分为多条。

如果同学想表达的不是这个意思,还麻烦同学具体描述一下自己的问题。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师