MyBatis的关联映射(多对多查询)

Mybatis实现多对多关联查询 Mybatis实现多对多关联查询详细步骤 阅读详情
public List<Orders> findOrdersWithProductByNestedResult(Integer id);

一:搭建mybatis框架

二:创建数据库

三:创建查询映射 与 代码补齐

        1:创建Orders实体

        2:创建mapper

        3:创建映射

        4:写测试类

        5:运行结果

四: 嵌套结果查询

二:创建数据库

USE mybatis;
# 创建一个名称为tb_product的表
CREATE TABLE tb_product (
  id INT(32) PRIMARY KEY AUTO_INCREMENT,
  NAME VARCHAR(32),
  price DOUBLE 
 );
# 插入3条数据
INSERT INTO tb_product VALUES ('1', 'Java基础入门', '44.5');
INSERT INTO tb_product VALUES ('2', 'Java Web程序开发入门', '38.5');
INSERT INTO tb_product VALUES ('3', 'SSM框架整合实战', '50');
# 创建一个名称为tb_ordersitem 的中间表
CREATE TABLE tb_ordersitem (
    id INT(32) PRIMARY KEY AUTO_INCREMENT,
    orders_id INT(32),
    product_id INT(32),
    FOREIGN KEY(orders_id) REFERENCES tb_orders(id),
FOREIGN KEY(product_id) REFERENCES tb_product(id)
);
# 插入3条数据
INSERT INTO tb_ordersitem  VALUES ('1', '1', '1');
INSERT INTO tb_ordersitem  VALUES ('2', '1', '3');
INSERT INTO tb_ordersitem  VALUES ('3', '3', '3');
# 订单表tb_orders由于在上面已经创建,所以这里不用再次创建

三:创建查询映射 与 代码补齐

        1:创建Orders、product实体

package com.biem.pojo;

import lombok.*;

import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Orders {
    private Integer id;
    private String number;
    private Integer userId;
    private Users users;
    private List<Product> productList;

}


 product实体

package com.biem.pojo;

import lombok.*;

import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Product {
    private Integer id;
    private String name;
    private Double price;
    private List<Orders> ordersList;
}

        2:创建mapper

public List<Orders> findOrdersWithProduct(Integer id);
public List<Product> findProductById(Integer id);

        3:创建映射(ordermapper、productmapper)

<select id="findOrdersWithProduct" parameterType="Integer" resultMap="OrdersWithProductResult">
        select * from tb_orders where id = #{id}
    </select>
    <resultMap id="OrdersWithProductResult" type="Orders">
        <id property="id" column="id"></id>
        <result property="number" column="number"></result>
        <collection property="productList" column="id" ofType="Product" select="com.biem.mapper.ProductMapper.findProductById">
        </collection>
    </resultMap>

product mapper

 <select id="findProductById" parameterType="Integer" resultType="Product">
        select * from tb_product where id in(
            select product_id from tb_ordersitem where orders_id = #{id}
            )
    </select>

        4:写测试类

package com.biem.test;

import com.biem.mapper.OrdersMapper;
import com.biem.pojo.Orders;
import com.biem.util.MybatisUtil;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

import java.util.List;


public class OrdersTest {
    @Test
    public void testFindOrdersWithProduct(){
        SqlSession session = MybatisUtil.openSession();
        OrdersMapper mapper = session.getMapper(OrdersMapper.class);
        List<Orders> ordersList = mapper.findOrdersWithProduct(1);
        System.out.println("ordersList = " + ordersList);
    }

}

        5:运行结果

​

 四:嵌套结果查询

ordernapper.java添加:

public List<Orders> findOrdersWithProductByNestedResult(Integer id);

 ordermapper.xml添加:

    <!-- public List<Orders> findOrdersWithProductByNestedResult(Integer id); -->
    <select id="findOrdersWithProductByNestedResult" parameterType="Integer" resultMap="OrdersWithProductResult2">
        select o.*, p.id as pid, p.name, p.price
        from tb_orders o, tb_product p, tb_ordersitem oi
        where oi.orders_id=o.id and oi.product_id=p.id and o.id=#{id}
    </select>
    <resultMap id="OrdersWithProductResult2" type="Orders">
        <id property="id" column="id"></id>
        <result property="number" column="number"></result>
        <collection property="productList" ofType="product">
            <id property="id" column="pid"/>
            <result property="name" column="name"/>
            <result property="price" column="price"/>
        </collection>
    </resultMap>

测试类添加:

	@Test
    public void findOrdersWithProductByNestedResult(){
        SqlSession session = MyBatisUtil.openSession();
        OrdersMapper mapper = session.getMapper(OrdersMapper.class);
        List<Orders> ordersList = mapper.findOrdersWithProductByNestedResult(1);
        System.out.println("ordersList = " + ordersList);
    }

结果:

mybatis手写多对多关联映射 mybatis手写多对多关联映射1.一对一关联查询1.1resultType实现1.2resultMap实现2.一对多关联查询3.多对多关联查询4.resultType与resultMap总结 这里在进行多不多关联查询配置时,需要用到一对一以及一对多查询,所以在进行mybatis的多对多关联查询之前先进行一对一以及一对多关联映射的配置,如果掌握了的话可以直接跳过第一和第二步骤 前提:sqlMapC... 阅读详情

相关推荐

使用mybatis框架对MySQL表进行关联映射查询

使用mybatis框架对MySQL表进行关联映射查询XML配置一对一关联映射- 嵌套查询- 嵌套结果一对多关联映射- 嵌套结果- 嵌套查询多对多关联映射- 嵌套结果- 嵌套查询- 关联表结构 一对一关联映射   association元素 - 嵌套查询 <select id="id名" parameterType="id参数类型" resultMap="外部resultMap名"> select * from 查询的主表 where id = #{id} </sel

qq_44444107的博客 756

MyBatis之关联查询

在使用MyBatis进行数据库操作时,关联查询是一种重要的查询方式。它能够在一个查询中同时检索多个表中的数据,从而提高查询效率和性能。在开始学习和使用MyBatis的关联查询之前,我们需要先了解一些基础概念和知识,包括数据库表、实体类、Mapper接口和Mapper.xml文件等。在接下来的博客文章中,我们将逐步学习如何使用MyBatis进行关联查询,并通过示例代码演示如何实现多对一和一对多的关联查询。希望通过这些介绍,你能够掌握MyBatis关联查询的基本知识和技能,并能够在实际项目中应用这些知识。

liubopro666的博客 1889

MyBatis 多表关联查询

MyBatis 多表关联查询:一对多查询, 多对一查询, 自连接查询: 使用多对一的方式实现自连接, 使用一对多的方式实现自连接, 多对多查询

不迁怒,不贰过。小知识,大智慧。 4404

MyBatis的关联映射(多对多查询)

ProductMapper.java 添加。OrdersMapper.java 添加。OrderMapper.java 添加。OrdersMapper.xml 添加。ProductMapper.xml添加。OrdersMapper.xml 添加。OrderTest.java 添加。OrderTest.java添加。

m0_72380971的博客 987

Dify整合FireCrawl与百度搜索实战:手把手教你打造全能研究助手

本文手把手教你基于Dify平台,整合FireCrawl网页爬虫与百度搜索能力,构建一个能同时处理本地文档与实时网络信息的全能研究助手。通过部署核心环境、配置模型、接入两大工具并设计自动化工作流,实现从问题提出到深度分析报告生成的一站式解决方案,极大提升信息调研与整合效率。

weixin_29062963的博客 500

避开这5个坑!STC8H DMA串口通信的实战避坑指南(115200波特率实测)

本文深入解析了STC8H单片机利用DMA实现稳定全双工串口通信的实战要点。针对115200高波特率场景,详细拆解了DMA-UART架构、关键寄存器配置、时钟精度计算、缓冲区管理及中断协同等核心环节,并提供了具体的避坑指南和调试方法,帮助开发者构建高效可靠的通信链路。

melon的博客 675

【Mybatis篇】Mybatis的关联映射详细代码带练 (多对多查询、Mybatis缓存机制)

关联映射是数据处理和编程中的一个重要概念,尤其在数据库和面向对象编程中应用广泛。它主要处理实体之间的关系,无论是将这种关系映射到数据库表之间,还是在面向对象编程中处理类之间的关系。实体通常指的是具体的事物,如用户、订单、产品等,在数据库中通常表示为表,而表中的每一行代表一个实体。关联映射的核心在于处理实体之间的关系,这种关系可以是简单的对应关系,也可以是更复杂的如一对一、一对多或多对多的关系。例如,一个用户可以有多个订单,但一个订单只属于一个用户,这就是典型的一对多关系。

m0_74202856的博客 2481

合规批量下载美国上市公司年报数据的一些经验和总结

本文总结了使用Python脚本批量下载和处理美国上市公司SEC报告的技术经验。通过CIK代码查询SEC EDGAR系统,生成特定日期和报告类型的URL,并使用Selenium和Requests库下载报告内容。流程包括数据获取、文件下载、Excel处理和多线程优化,确保高效处理几百条数据。关键技术挑战包括SEC访问限制、动态网页内容和数据完整性,解决方案包括设置合规的User-Agent、使用Selenium模拟浏览器行为以及错误日志记录。最佳实践包括模块化设计、多线程优化和严格遵守SEC合规性。该自动化流程

jyfool的博客 1636

javaee入门之旅之mybatis---(6)关联映射(一对一,一对多,多对多查询)

在实际的运用当中,除了进行单个表格的操作,还会涉及到多张表格,针对多表之间的操作,Mybatis提供了关联映射,通过关联映射可以很好的处理表与表、对象与对象之间的关联关系。此外,在实际开发中经常需要合理利用Mybatis缓存来加快数据库查询,进而有效提升数据库性能。关联关系映射是指在数据库表之间建立关联关系,并将这种关系映射到对象之间的关系。在关系型数据库中,我们通常使用外键来建立表与表之间的关联。一个数据表中的一条记录最多可以和另一个表中的一条记录相关。

xmuci的博客 1609

别再手动算重量了!用C++给UG/NX写个自动计算零件质量与质心的插件(附完整源码)

本文详细介绍了如何使用C++为UG/NX开发智能质量分析插件,实现零件质量与质心的自动计算。通过结合NXOpen和UF_MODL API,设计高效的数据结构和批量处理机制,大幅提升机械设计效率。文章包含完整源码和实用技巧,帮助工程师告别手动计算,适用于复杂装配体的自动化工程计算。

weixin_30247307的博客 133

USB通讯速度翻倍秘诀:手把手教你用WinUsb替代HID协议(附Zadig驱动配置图解)

本文详细介绍了如何通过WinUsb技术替代传统HID协议,实现USB通讯速度的显著提升。从技术对比、实现原理到Zadig驱动配置图解,手把手教你完成免驱高速通讯方案,适用于数据采集、固件升级等场景,实测速度可达HID协议的2倍以上。

weixin_29168675的博客 136

MyBatis的关联映射----多对多查询

INSERT INTO tb_product VALUES ('2', 'Java Web程序开发入门', '38.5');INSERT INTO tb_product VALUES ('1', 'Java基础入门', '44.5');INSERT INTO tb_product VALUES ('3', 'SSM框架整合实战', '50');ProductMapper.java 添加。OrdersMapper.java 添加。OrderTest.java 添加。OrderTest.java添加。

m0_69530989的博客 256

【施磊】C++课程笔记目录

【C++编程】施磊老师C++笔记目录

GeniusAng的博客 4124

MyBatis中的一对一,一对多,多对多关联映射查询

MyBatis中的一对一,一对多,多对多关联映射查询 一对多(嵌套结果) 将结果嵌套,在collection标签中加入对应的行表列映射: <resultMap id="BaseResultMap" type="com.luolin.springssm.model.Student"> <!-- id 表示主键, column 表示数据库中表的column名称,jdbcTy...

走不动的木木 1176

172、摄像头振动与异响分析:VCM 共振、OIS 机械噪声的用户体验改善

摘要: 本文深入探讨了手机摄像头模组中VCM(音圈马达)与OIS(光学防抖)系统产生的振动异响问题及其解决方案。通过实际案例,分析了VCM弹簧片共振、OIS悬丝机械噪声以及系统级共振的成因,提出了硬件改进(如弹簧片厚度调整、阻尼材料应用)、驱动优化(PWM频率微调、软启动配置)和算法避让等综合解决策略。特别强调了量产阶段隐蔽性问题的排查技巧,包括扫频测试、机械阻尼处理和用户体验优化方法(如频率掩蔽)。作者建议工程师避免过度依赖仿真数据,重视实物测试,并与声学团队协作,以解决这类"玄学"问题,提升用户感知体验

sundong_81的博客 129

【数据分析】基于多组学数据整合的微生物与宿主互作网络构建及可视化分析

综上所述,本教程通过详细的步骤和方法,展示了如何整合微生物群落数据、宿主基因表达数据和代谢组数据,构建微生物与宿主互作网络,并进行可视化分析。这种方法为研究微生物与宿主之间的复杂关系提供了一种有力的工具,有助于推动相关疾病的研究和治疗。然而,在实际应用中,需要注意数据处理和分析过程中的各种问题,并结合实验验证来提高研究结果的可靠性和科学性。未来,随着多组学技术的不断发展和完善,以及数据分析方法的创新,相信我们能够更深入地理解微生物与宿主之间的互作机制,为疾病的预防、诊断和治疗提供更有力的支持。

专注生信领域 370

MyBatis的多对多映射(十)

年轻的时候,遇见了一个人,便以为余生再没有江湖,后来,才懂,她才是江湖的起源。 上一章简单介绍了MyBatis的一对多映射(九),如果没有看过,请观看上一章。 一. Mybatis的多对多关联映射 多对多的关系在数据库中是很常见的,但是在业务代码中常常处理成 双向的一对多的关联。 可以与Hibernate的多对多对照来看: Hibernte的多对多映射(十二) 创建User表: 创建Role 角...

两个蝴蝶飞 3873

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Mybatis关联映射 多表查询(三种写法优缺点、主流性) 以及分步查询 延迟加载(按需加载、懒加载)

本文其实是我给自己写的保姆级教程,以防自己在新手期忘记了怎么写。。。。也方便自己时常拿出来看看

Scyth1的博客 2343

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mybatis实现多表一对一,一对多,多对多关联查询

1、一对一 关键字:association 作用:针对pojo对象属性的映射       property:pojo的属性名       javaType:pojo类名 (1) 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集 <!-- 1、构造器注入 -->

Adamlawen的博客 3万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Mybatis04_多对多查询

Mybatis03_多对多查询 customer表结构: customer表内容: goods表结构: goods表内容: 中间表customer_goods表结构: 中间表customer_goods表内容: Customer实体: package com.blu.entity; import java.util.List; import lombok.Data; @Data public class Customer { private long id; private String

BLU_111的博客 6万+

JavaEE第4章 MyBatis的关联映射

MyBatis的关联映射

qq_51916863的博客 1221

mybatis关联映射(多表查询多对多)

准备测试数据 教师表 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for teacher -- ---------------------------- DROP TABLE IF EXISTS `teacher`; CREATE TABLE `teacher` ( `t_id`...

全栈测试笔记 331

MyBatis 关联映射

MyBatis 关联映射,实现数据的一对一、一对多、多对多查询,同时对嵌套查询和嵌套结果集两种配置方法分别进行了演示。

m0_52861684的博客 3608
上一篇: MyBatis的关联映射(多对一查询)
舒安生
博客等级 码龄5年 7粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值