Mybatis——一对多关联映射

一对多关联映射

一对多关联映射有两种方式,都用到了collection元素

以购物网站中用户和订单之间的一对多关系为例

collection集合的嵌套结果映射

创建两个实体类和映射接口

package org.example.demo;

import lombok.Data;

import java.util.List;

@Data
public class User {
    private Integer userId;
    private String userName;
    private String password;
    private Cart cart;
    private List<Order> orderList;
}
package org.example.demo;

import lombok.Data;

@Data
public class Order {
    private Integer orderId;
    private double price;
}

实现根据用户id查询出所有用户信息,包括该用户的所有订单信息 

package org.example.mapper;

import org.example.demo.User;

import java.util.List;

public interface UserMapper {

    User findUserAndOrderListByUserId(Integer userId);
}
方式一:与association类似,集合的嵌套结果映射就是指通过一次SQL查询得到所有的结果 
<resultMap type="com.mybatis.entity.User" 
        id="userMap">
        <id property="id" column="id"/>
    <result property="userName" column="user_name"/>
    <result property="password" column="password"/>
</resultMap>
<resultMap type="com.mybatis.entity.User" 
    id="userAndOrderListMap" extends="userMap">
    <collection property="orderList" 
        ofType="com.mybatis.entity.Order">
        <id property="id" column="order_id"/>
        <result property="price" column="price"/>
    </collection>
</resultMap>
<select id="findUserAndOrderListById" 
    resultMap="userAndOrderListMap">
    select u.id, u.user_name, u.password,
    o.order_id, o.price
    from user u
    left join orders o on u.id = o.user_id
    where u.id = #{id}
</select>

resultMap元素中的extends属性可以实现结果映射的继承

collection的ofType属性指定集合中元素的类型,必选项 

    <resultMap id="userAndOrderMap" type="org.example.demo.User">
        <id property="userId" column="user_id"/>
        <result property="userName" column="user_name"/>
        <result property="password" column="password"/>
        <collection property="orderList" ofType="org.example.demo.Order">
            <id property="orderId" column="order_id"/>
            <result property="price" column="price"/>
        </collection>
    </resultMap>
    <select id="findUserAndOrderListByUserId" resultMap="userAndOrderMap">
        select
            *
        from t_user u
        left join t_order o on u.user_id = o.user_id
        where u.user_id = #{userId};
    </select>

 

collection集合的嵌套查询

集合的嵌套查询同样会执行额外的SQL查询

<resultMap type="com.mybatis.entity.User"
    id="userAndOrderListMap" extends="userMap">
    <collection property="orderList" column="{uid=id}"
        ofType="com.mybatis.entity.Order"       select="com.mybatis.mapper.OrderMapper.findOrdersByUserId">
    </collection>
</resultMap>
<select id="findUserAndOrderListById" 
    resultMap="userAndOrderListMap">
    select * from user where id = #{id}
</select>

OrderMapper.xml

<resultMap type="com.mybatis.entity.Order"
    id="orderMap">
    <id property="id" column="order_id"/>
    <result property="price" column="price"/>
</resultMap>
<select id="findOrdersByUserId"
    resultMap="orderMap">
    select * from orders where user_id = #{uid}
</select>

对比两种方式

第一种方式属于“关联的嵌套结果映射“,即通过一次SQL查询根据表或指定的属性映射到不同的对象中

第二种方式属于“关联的嵌套查询”,利用简单的SQL语句,通过多次查询得到想要的结果,也可以实现延迟加载效果 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/512062.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Canvas实现简易数字电子时钟(带自定义样式)

前置内容 Canvas实现简易数字电子时钟 Canvas实现数字电子时钟&#xff08;带粒子掉落效果&#xff09; 效果 逻辑代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>粒子时钟-完整版</title&g…

OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译&#xff0c;此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码&#xff0c;并且创建厂商工作目录完成厂商芯片的编译框架适配。 搭建编译环境 开展移植前请参考开发环境准备完成环境搭建工作。 获取源码 获取…

【蓝桥杯第十三届省赛B组】(部分详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…

《剑指 Offer》专项突破版 - 面试题 101、102、103 和 104 : 和动态规划相关的背包问题(C++ 实现)

目录 前言 面试题 101 : 分割等和子集 面试题 102 : 加减的目标值 面试题 103 : 最少的硬币数目 方法一 方法二 面试题 104 : 排列的数目 前言 背包问题是一类经典的可以应用动态规划来解决的问题。背包问题的基本描述如下&#xff1a;给定一组物品&#xff0c;每种物品…

策略到成果:六西格玛培训在各行业中的转化与实施

六西格玛培训作为一种管理方法论&#xff0c;已经在多个行业中得到应用&#xff0c;并为这些行业带来了显著的贡献。下面张驰咨询给大家介绍几个主要行业的应用情况&#xff1a; 制造业&#xff1a;在制造业中&#xff0c;六西格玛的应用可以带来显著的质量和成本优势。通过减…

Open-Sora环境搭建推理测试

引子 Sora&#xff0c;2024年2月15日&#xff0c;OpenAI发布的人工智能文生视频大模型。支持60秒视频生成&#xff0c;震荡了国内国际学术圈、广告圈、AI教培圈。Sora最主要有三个优点&#xff1a;第一&#xff0c;“60s超长视频”&#xff0c;之前文本生成视频大模型一直无法真…

Qt实现Kermit协议(三)

3 实现 3.2 KermitSendFile 该模块实现了Kermit发送文件功能。 序列图如下&#xff1a; 3.2.1 KermitSendFile定义 class QSerialPort; class KermitSendFile : public QObject, public Kermit {Q_OBJECT public:explicit KermitSendFile(QSerialPort *serial, QObject *…

比特币和区块链详解: Bitcoin: A Peer-to-Peer Electronic Cash System白皮书

背景 考虑当前手机上的余额、手里的现金&#xff0c;其实本质都归属于银行发给我们的欠条&#xff0c;是在政府监管下的流通货币。当我们在做交易时&#xff0c;银行属于可信第三方&#xff0c;银行发行的货币在交易过程中起到了重要作用。但基于金融机构的受信任第三方容易受…

使用pytorch构建带梯度惩罚的Wasserstein GAN(WGAN-GP)网络模型

本文为此系列的第三篇WGAN-GP&#xff0c;上一篇为DCGAN。文中仍然不会过多详细的讲解之前写过的&#xff0c;只会写WGAN-GP相对于之前版本的改进点&#xff0c;若有不懂的可以重点看第一篇比较详细。 原理 具有梯度惩罚的 Wasserstein GAN (WGAN-GP)可以解决 GAN 的一些稳定性…

【WEEK6】 【DAY2】DQL查询数据-第二部分【中文版】

2024.4.2 Tuesday 接上文【WEEK6】 【DAY1】DQL查询数据-第一部分【中文版】 目录 4.4.连接查询4.4.1.JOIN 对比4.4.2.七种JOIN4.4.3.例4.4.3.1.本例中INNER JOIN和RIGHT JOIN结果相同4.4.3.2.LEFT JOIN4.4.3.3.查询缺考的同学4.4.3.4.思考题&#xff1a;查询参加了考试的同学信…

Visual Studio安装下载进度为零已解决

因为在安装pytorch3d0.3.0时遇到问题&#xff0c;提示没有cl.exe&#xff0c;VS的C编译组件&#xff0c;可以添加组件也可以重装VS。查了下2019版比2022问题少&#xff0c;选择了安装2019版&#xff0c;下面是下载安装时遇到的问题记录&#xff0c;关于下载进度为零网上有三类解…

redis的哈希Hash

哈希是一个字符类型的字段和值的映射表&#xff0c;简单来说就是一个键值对的集合。 查看里面的name或者age在不在里面&#xff0c;0说明已经删了的 用来获取person里的键

[C#]使用OpencvSharp去除面积较小的连通域

【C介绍】 关于opencv实现有比较好的算法&#xff0c;可以参考这个博客OpenCV去除面积较小的连通域_c#opencv 筛选小面积区域-CSDN博客 但是没有对应opencvsharp实现同类算法&#xff0c;为了照顾懂C#编程同学们&#xff0c;因此将 去除面积较小的连通域算法转成C#代码。 方…

Java获取IP地址以及MAC地址(附Demo)

目录 前言1. IP及MAC2. 特定适配器 前言 需要获取客户端的IP地址以及MAC地址 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class test {public static void main(String[] args) {try {// 执行命令Process process…

Nginx在Kubernetes集群中的进阶应用

简介 在现代DevOps环境中&#xff0c;Nginx作为负载均衡器与Kubernetes的Ingress资源的结合&#xff0c;为应用程序提供了强大的路由和安全解决方案。本文将深入探讨如何利用Nginx的灵活性和功能&#xff0c;实现高效、安全的外部访问控制&#xff0c;以及如何配置Ingress以优…

智能小车测速(3.26)

模块介绍&#xff1a; 接线&#xff1a; VCC -- 3.3V 不能接5V&#xff0c;否则遮挡一次会触发3次中断 OUT -- PB14 测速原理&#xff1a; cubeMX设置&#xff1a; PB14设置为gpio中断 打开定时器2&#xff0c;时钟来源设置为内部时钟&#xff0c;设置溢出时间1s&#xff0c…

上位机图像处理和嵌入式模块部署(qmacvisual图像清晰度)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 做过isp的同学都知道&#xff0c;图像处理里面有一个3a&#xff0c;即自动曝光、自动白平衡和自动对焦。其中自动对焦这个&#xff0c;就需要用输入…

qt通过setProperty设置样式表笔记

在一个pushbutton里面嵌套两个label即可&#xff0c;左侧放置图片label&#xff0c;右侧放置文字label&#xff0c;就如上图所示&#xff1b; 但是这时的hover&#xff0c;press的伪状态是没有办法“传递”给里面的控件的&#xff0c;对btn的伪状态样式表的设置&#xff0c;是不…

IP SSL的应用与安装

IP SSL&#xff0c;即互联网协议安全套接字层&#xff0c;它是一种为网络通信提供安全及数据完整性的安全协议。在网络传输过程中&#xff0c;IP SSL可以对数据进行加密&#xff0c;这样即便数据在传输途中被截取&#xff0c;没有相应的解密密钥也无法解读内容。这一过程如同将…

防抖节流面试

1、防抖 1.1、条件 1、高频 2、耗时&#xff08;比如console不算&#xff09; 3、以最后一次调用为准 刷到个神评论&#xff0c;回城是防抖&#xff0c;技能cd是节流 1.2、手写 传参版本 function debounce(fn,delay){let timerreturn function(...args){//返回函数必须是普…