mybatisplus实现关联查询(为什么要使用mybatis)

关联查询数据模型订单商品模型:目标:分析表与表之间的关系。分析步骤:1、按模块去分析表,不要将系统全部表一次性分析2、了解每个表存储了什么业务数据3、了解表中关键字段(主键、外键、索引字段、非空字段)4、了解表与表之间数据库级别的关系(外键关系)5、表与表之间的业务关系(一对一、一对多、多对多)注意:分析表与表之间的业务关系时一定要建立在某种业务意

大家好,又见面了,我是你们的朋友全栈君。

关联查询

数据模型

订单商品模型:
这里写图片描述

目标:分析表与表之间的关系。

分析步骤:
1、按模块去分析表,不要将系统全部表一次性分析
2、了解每个表存储了什么业务数据
3、了解表中关键字段(主键、外键、索引字段、非空字段)
4、了解表与表之间数据库级别的关系(外键关系)
5、表与表之间的业务关系(一对一、一对多、多对多)
注意:分析表与表之间的业务关系时一定要建立 在某种业务意义基础上
这里写图片描述
user表:存储了购买用户信息
网民,在电商系统中注册成为购买用户
orders表:存储了用户创建的订单信息
用户购买东西,一次不管购买多少商品只会创建一个订单
比如:张三一次购买手机、电脑,在orders表插入一条订单记录

orderdetail表:存储用户创建订单的详细信息,记录当时用户购买商品的购买信息
比如:张三一次购买手机、电脑,在orders表插入一条订单记录,在订单明细表插入两条记录,订单明细表每条记录对应一个商品信息
items商品表:存储了电商系统中的商品信息,用户在网站查看的商品信息就是来源与这张表
比如:网站销售手机,在这个表中插入很多的不同型号手机商品信息

orders—>user:
一个订单只能由一个用户创建,一对一关系
user—>orders:
一个用户可以创建多个订单,一对多关系

一对一查询

  • 需求
    查询订单关联查询用户信息
  • 分析
    使用mybatis开发持久层的dao接口时,要分析的重点就是sql语句如何实现?

主查询表:orders订单表
关联查询表:user用户信息
确定关联查询方法:包括内链接、外链接
由于orders表有外键user_id,根据user_id去查询user只能查询到一条记录的。就可以使用内链接。
SELECT
orders.*,
user.username,
user.address
FROM
orders,
USER
WHERE orders.user_id = user.id
– 基本数据模型po
一个表对应一个po类,表名和po类名一致,表的属性和po的属性一致。
这里写图片描述

resultType实现

resultType映射规则:sql查询出几条记录,只要保证sql列名和resulttype指定的pojo类型的属性一致,可以映射成功,sql查询出几条记录最终映射生成的List就有几个对象。
– 自定义pojo
由于与表对应的po类的属性不能够全部包括下边列名,所以自定义pojo,属性名和下边的列名保持一致
这里写图片描述
这里写图片描述

  • mapper.xml
    这里写图片描述
  • mapper.java
    这里写图片描述

resultMap实现

  • 需求
    主查询是订单信息,要将主查询订单信息映射到orders对象中,在orders中创建user属性,让关联查询出来的用户信息映射到orders对象中的user属性中。其主要目标为了获取信息方便,如果想获取用户的信息,调用orders对象的getUser()方法即可。
  • 在orders中创建user属性
    这里写图片描述
  • mapper.xml
    这里写图片描述
  • resultMap
    这里写图片描述
  • mapper.java
    这里写图片描述

多对多查询

  • 需求
    查询用户信息及用户购买的商品信息
  • 分析
    主查询表:user用户信息
    关联查询表:orders订单、orderdetail订单明细、items商品信息
    采用内链接关联。
SELECT 
  orders.*,
  user.username,
  user.address,
  orderdetail.id orderdetail_id,
  orderdetail.items_id,
  orderdetail.items_num,
  items.name items_name,
  items.pic items_pic
FROM
  orders,
  USER,
  orderdetail,
  items
WHERE orders.user_id = user.id 
  AND orderdetail.orders_id = orders.id 
  AND items.id = orderdetail.items_id
  • 映射需求
    在user中设置一个List orders属性,在order对象中设置List orderdeils 属性,在Orderdetail中设置Items属性。
    最终查询出来的用户列表,用户信息映射到List中,用户创建的订单信息隐射到user中的List orders属性,订单下的明细映射到order对象中List orderdeils 属性,订单明细所对应的商品信息映射到Orderdetail中Items属性
  • 修改po类
    这里写图片描述
    这里写图片描述
  • mapper.xml
    这里写图片描述
  • resultMap
<!-- 查询用户及用户购买的商品信息 最终要将查询结果映射成List<User> -->
<resultMap type="user" id="userAndItemsResultMap">
    <!-- 用户信息 -->
    <id column="user_id" property="id"/>
    <result column="username" property="username"/>
    <result column="address" property="address"/>

    <!-- 订单信息 一个用户可以创建多个订单 -->
     <collection property="ordersList" ofType="cn.itcast.mybatis.po.Orders">
        <id column="id" property="id" />
        <result column="user_id" property="userId" />
        <result column="number" property="number" />
        <result column="createtime" property="createtime" />
        <result column="note" property="note" />
        <!-- 订单明细信息 一个订单包括多个明细信息 -->
         <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
            <id column="orderdetail_id" property="id"/>
            <result column="id" property="ordersId"/>
            <result column="items_id" property="itemsId"/>
            <result column="items_num" property="itemsNum"/>
            <!-- 商品信息 一个明细对应一个商品 -->
            <association property="items" javaType="cn.itcast.mybatis.po.Items">
                <id column="items_id" property="id"/>
                <result column="items_name" property="name"/>
                <result column="items_pic" property="pic"/>
            </association>
        </collection>
    </collection>
</resultMap>
  • mapper.java
    这里写图片描述
  • resultMap总结
    resultMap实现高级映射,如果对结果有高级映射的需求可以使用reusltMap,需求比如:将一个列表数据映射到pojo的list属性中采用resultmap。
    如果仅仅是将查询列表简单映射为List方式,列表中每个pojo对应一条记录,采用resultType即可。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/128006.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月11日 下午12:00
下一篇 2022年4月11日 下午12:00


相关推荐

  • AvalonDock 2.0 的简单运用

    AvalonDock 2.0 的简单运用最近在研究AvalonDock的一些使用,碰到了一些问题。现在拿出来跟大家分享分享。网上找了一大把AvalonDock1.3版本的资料,弄出Demo后发现属性面板(DockableContent)设置成浮动后不能停靠其它的面板。最后只得试试AvalonDock2.0版本的,还好2.0版本没让我们失望。首先需要库文件:Xceed.Wpf.AvalonDock…

    2022年7月20日
    22
  • C++ 数独解法

    C++ 数独解法问题描述 数独 Sudoku 是一款大众喜爱的数字逻辑游戏 玩家需要根据 9X9 盘面上的已知数字 推算出所有剩余空格的数字 并且满足每一行 每一列 每一个粗线宫内的数字均含 1 9 并且不重复 输入 包含已知数字的 9X9 盘面数组 空缺位以数字 0 表示 输出 完整的 9X9 盘面数组原题链接 include iostream include map include amp map iostream

    2026年3月19日
    3
  • python支持向量机回归_支持向量机——核函数与支持向量回归(附Python代码)[通俗易懂]

    python支持向量机回归_支持向量机——核函数与支持向量回归(附Python代码)[通俗易懂]上期跟大家介绍了支持向量机的一般原理,今天继续跟大家聊聊支持向量机——核函数与支持项链回归。1核函数数据通过某种变换,使原本二维的问题通过某种函数转换到高维的特征空间,而这个函数就称为核函数。核函数有很多种,有线性核函数,多项式核函数,高斯核函数等,其中高斯核函数最为著名。核函数可以说是支持向量机的灵魂,因为现实生活中,我们不大可能通过一个线性的等式就可以完美的解决一个分类问题,总是要经过核函数…

    2022年6月5日
    39
  • Midjourney 全新功能 “Omni-Reference”,让图像生成万物皆可一致化

    Midjourney 全新功能 “Omni-Reference”,让图像生成万物皆可一致化

    2026年3月15日
    1
  • 2021pycharm永久激活码[免费获取]

    (2021pycharm永久激活码)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~MLZPB5EL5Q-eyJsaWNlb…

    2022年3月20日
    97
  • 用3500预算配置一台台式计算机,高配置台式电脑清单,做出最好的预算

    用3500预算配置一台台式计算机,高配置台式电脑清单,做出最好的预算导语:电脑是如今人们使用最多的电子设备之一,对于很多对电脑都有高端要求的人来说,电脑配置的要求都比较高。现在很多市场上的电脑配置大多都是半好半坏,要想真正的找出自己心里认为的最高配置的电脑,那几乎是不大可能的。但是很多人也认识到了这一点,于是都会自己购置一些较好的物件自己进行组装。下面小编就介绍几种高配置台式电脑清单。一、预算2500元左右CPU可以选择INTELI34160,价格在650元左右。…

    2022年7月12日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号