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

mybatis多表联查(一对一、一对多/多对一、多对多) 在开发过程中单表查询往往不能满足需求分析的很多功能,对于比较复杂业务来说,关联的表有几个,甚至是几十个并且表与表之间的关联相当复杂。为了能够实现复杂的功能业务,就必须进行多表查询,在mybatis中提供了多表查询映射标签,可以实现表之间的一对一、一对多、多对多关系的映射。 **注意:**大批代码正在向你靠近注意:测试代码块放最后运行出错可以看看在示例演练之前需要的准备:首先创建一个maven项目在pom.xml中配置文件 创建配置jdbc.properties 创建配置文件config.xml连接数据库和数 阅读详情

一:搭建mybatis框架

二:创建数据库

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

        1:创建Orders实体

        2:创建mapper

        3:创建映射

        4:写测试类

        5:运行结果

二:创建数据库

USE mybatis;
# 创建一个名称为tb_user的表
CREATE TABLE tb_user (
  id int(32) PRIMARY KEY AUTO_INCREMENT,
  username varchar(32),
  address varchar(256)
 );
# 插入3条数据
INSERT INTO tb_user VALUES ('1', '小明', '北京');
INSERT INTO tb_user VALUES ('2', '李华', '上海');
INSERT INTO tb_user VALUES ('3', '李刚', '上海');
# 创建一个名称为tb_orders的表
CREATE TABLE tb_orders (
  id int(32) PRIMARY KEY AUTO_INCREMENT,
  number varchar(32) NOT NULL,
  user_id int(32) NOT NULL,
  FOREIGN KEY(user_id) REFERENCES tb_user(id)
);
# 插入3条数据
INSERT INTO tb_orders VALUES ('1', '1000011', '1');
INSERT INTO tb_orders VALUES ('2', '1000012', '1');
INSERT INTO tb_orders VALUES ('3', '1000013', '2');

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

        1:创建Orders、Users实体

orders

package com.biem.pojo;

import lombok.*;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Orders {
    private Integer id;
    private String number;
    private Integer userId;
    private Users users;
}


 users

package com.biem.pojo;

import lombok.*;

import java.util.List;

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Users {
    private Integer id;
    private String username;
    private String address;
    private List<Orders> ordersList;
}

        2:创建mapper

package com.biem.mapper;

import com.biem.pojo.Orders;

import java.util.List;

public interface OrdersMapper {
    public List<Orders> getOrders1(Integer userId);


}
package com.biem.mapper;

import com.biem.pojo.Users;

public interface UsersMapper {

    public Users getUsersById(Integer id);


}

        3:创建映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper为映射的根节点-->
<!-- mapper为映射的根节点,namespace指定Dao接口的完整类名
mybatis会依据这个接口动态创建一个实现类去实现这个接口,
而这个实现类是一个Mapper对象-->
<mapper namespace="com.biem.mapper.OrdersMapper">


        <select id="getOrders1" resultMap="ordersResult1">
        select * from tb_orders where user_id = #{userId}
    </select>
    <resultMap id="ordersResult1" type="orders">
        <result column="id" property="id"/>
        <result column="number" property="number"/>
        <result column="user_id" property="userId"/>        <!--复杂的属性,我们需要单独处理
            对象:使用association
            集合:collection-->
        <association column="id" property="users" javaType="users" select="com.biem.mapper.UsersMapper.getUsersById"/>
    </resultMap>

</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper为映射的根节点-->
<!-- mapper为映射的根节点,namespace指定Dao接口的完整类名
mybatis会依据这个接口动态创建一个实现类去实现这个接口,
而这个实现类是一个Mapper对象-->
<mapper namespace="com.biem.mapper.UsersMapper">


        <select id="getUsersById" resultType="users">
        select * from tb_user where `id` = #{id}
    </select>

</mapper>

        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 testGetOrders1(){
        SqlSession session = MybatisUtil.openSession();
        OrdersMapper mapper = session.getMapper(OrdersMapper.class);
        List<Orders> ordersList = mapper.getOrders1(1);
        System.out.println("ordersList = " + ordersList);
    }
}

        5:运行结果

 

MyBatis的关联映射(多对一,多对多) 【代码】MyBatis的关联映射(多对一,多对多) 阅读详情

相关推荐

【MyBatis笔记06】MyBatis中的三种关联查询方式(一对一、一对多、多对多)

一对一的查询情况,假设员工和部门的关系是:一个员工只能够在一个部门里面,而一个部门对应一个员工(当然这是不合理的,但是这里仅仅是为了测试),那么这种情况就可以使用MyBatis的一对一关联查询操作。MyBatis框架支持三种关联查询方式,分别是:一对一的查询情况、一对多的查询情况、多对多的查询情况,注意,这里指得是一张表中一条数据对应另外一张表中的数据情况。一对多关联查询,是指一张表中的一条数据,对应另外一张表中的多条数据记录,通过java代码描述就是一个实体类对象中包含一个List集合对象。...

✅ Java 开发工程师 3639

Mybatis多对一关联查询

有两张表: 学生表: 教师表: 其关联关系可表示为: 在一对多查询时(多个学生对应一个老师),可想到方法: 对结果集进行嵌套查询 将所需的教室和学生类构建好后,将mybatis核心配置完成后(所需的类和核心配置文件在文章末尾) TeacherMapper.xml文件可进行查询: <!-- 结果嵌套查询--> <select id="getTeacher" resultMap="TeacherStudent"> select s.id sid,

Ctra_aaa的博客 963

数学文化赏析MOOC笔记【2023】

深圳大学UOOC课程《数学文化赏析》课程笔记

simplenthpower的博客 1753

mybatis : 多对一关联查询

Order{id=11, orderNumber='20', orderPrice=22.22, customer=Customer{id=1, name='荷包蛋', age=22, orders=[]}}根据订单id查询订单的信息,以及该订单所属的客户的基本信息(不包括该客户自己的订单信息)//根据订单id查询订单的信息,以及该订单所属的客户的基本信息。//测试:根据订单id查询订单的信息,以及该订单所属的客户的基本信息。//根据订单id查询订单的信息,以及该订单所属的客户的基本信息。...

Candyz7的博客 847

MATLAB新手也能懂:用MATPOWER 8.0b搞定电力系统潮流计算(附case9实战代码)

本文详细介绍了如何使用MATPOWER 8.0b在MATLAB中进行电力系统潮流计算,特别适合新手入门。通过case9实战案例,讲解了从安装配置到运行牛顿-拉夫逊法潮流计算的全过程,包括结果分析和常见问题处理,帮助读者快速掌握这一电力系统分析的核心技能。

weixin_26757925的博客 381

省一蓝桥杯嵌入式-09RTC实时时钟

RTC(Real-Time Clock)实时时钟,是一个独立的定时器RTC模块拥有一组连续的计数的计数器,在响应软件配置下,可提供时钟、日历、闹钟功能RTC能提供年月日时分秒等信息(可设置)在系统复位或从待机模式唤醒后,RTC的设置时间维持不变(这个我没实现,复位后时间也重置了,有能力的可以自己研究一下)持续时间跟踪:在主系统断电后或处于低功耗模式时,RTC仍继续工作,原理是有额外的电池为其供电(蓝桥杯板子没有这个备用电源,该功能无效。

qq_46392331的博客 1729

MyBatis:使用 MyBatis 实现多表查询(多对一和一对多)、动态 SQL、缓存

详细介绍了使用 MyBatis 实现多表查询(多对一和一对多)、动态 SQL 以及缓存的相关内容

taiyang3285的博客 3991

Windows应急响应实战:灰鸽子木马检测与清除全流程解析

远程控制木马(RAT)是一种基于客户端/服务器(C/S)架构的恶意软件,攻击者通过它能够远程操控受害主机,实现屏幕监控、文件窃取、键盘记录等操作,对个人隐私与企业数据安全构成严重威胁。其技术原理通常涉及进程注入、网络通信、持久化机制等核心环节,在应急响应中具有极高的分析价值。掌握此类木马的检测与清除方法,是Windows系统安全防护与事件处置的基本功。本文以经典的灰鸽子木马为例,结合进程分析、网络排查、注册表检查等实战技术,系统讲解从行为识别、痕迹取证到彻底清除的完整操作流程,并涵盖Rootkit对抗、无文

weixin_30521161的博客 415

快速入门mybatis关联映射(详解)

适合初学者,对mybatis的关联映射进行了详解的介绍

hefangxuxing的博客 3268

CycloneDDS(C++版本)开源代码在Linux(X86平台)系统上编译生成可执行文件的详细步骤

cyclonedds里面已经有现成的实例供我们参考,在根目录下的example目录下面,我们打开此目录,此目录下有CMakeLists.txt文件以及一些其他的文档,我们需要在此目录(example目录)下编译构建出。我们可以看到cyclonedds-cxx-master包下的example目录下有很多文件,包括CMakeLists.txt等,其中我们要构建的可执行文件所需要的源文件等就在。此过程会稍微慢一点。之后会报错,如下:(图片中是c版本出现的问题截图,不影响,c++也是这个影响,问题是一样的)

qq_42595610的博客 1251

[dprecated]第五章:TTM分析: 5.1 TTM设计目标和核心概念

TTM是Linux DRM框架下的通用显存管理模块,其复杂性源于需要满足多样化的显存管理需求。该文解析了TTM的核心结构体及其关系:ttm_device作为顶层管理者,包含多个ttm_resource_manager处理不同类型内存;ttm_buffer_object为核心对象,通过ttm_resource关联物理资源;其他组件如ttm_tt管理页表、ttm_pool优化分配效率。文章强调理解这些结构体关系是掌握TTM机制的基础,并建议国产芯片开发者参考这些功能需求。

图形/计算GPU的驱动与虚拟化技术分享园地 2129

SSM——6.Mybatis的关联映射

我们看下结果:以上就是我们嵌套查询的写法,建议使用这个,因为这个比较简单。、

m0_52096593的博客 1466

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1072

【MyBatis框架】关联映射

讲解MyBatis框架对于复杂映射关系的处理,resaultMap等标签的使用。

一个真ikun 2986

锂电池充放电管理-单片机通用模版

- **①两节锂电池通过电阻分压检测ADC,再根据电压划分电量等级;** - **②充电使用的是锂电池充电IC方案,可通过硬件电阻参数调节充电电流,并可以通过STAT引脚检测充电和满电状态(充电注意会抬高电压);** - **③放电根据ADC_BAT检测电池电量进行等级划分(注意大负载电压骤降瞬间);** - **④充放电过程注意在电量划分等级临界值来回抖动现象;**

a6662580的博客 1490

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Mybatis的一对多与多对一

一、Mybatis一对多与多对一 XML映射器 MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成本,让用户能更专注于 SQL 代码。 resultMap resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来,并

qq_42715246的博客 936

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Mybatis关联映射

关联映射查询: 如果我们没有开启Full全部映射,那么自己的数据也获取不到,只能一个一个对应字段,所以需要获取全部数据情况下,我们采用的步骤如下: 1.在大配置文件中开启映射 2.在小配置文件中加入映射resultMap,关联一的一方或者多的一方,其他只需要手动映射不一致字段即可 如果不需要全部获取,不用开启FULL,建议手动映射 关联映射分类: 1.一对一:*查询新闻时,需要将分类数据一...

weixin_45874909的博客 186

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MyBatis框架-关联映射

实体–数据实体,实体关系指的就是数据与数据之间的关系例如:订单和商品,用户和角色数据表关系:主键关联:用户表主键和用户详情表的主键相同时,表示是匹配的数据唯一外键关联:用户表和详情表使用外键关联,但需要将外键设置为唯一键一对多:班级对学生多对一:学生对班级数据表关系:建立第三张关系表,添加两个外键分别和两张表主键进行关联。

f135917h的博客 1090

【mybatis】关联映射

这里需要将student类当中关于teacher的字段删除。-- student类当中的关联字段。然后生成改写器与访问器,toString。然后生成改写器与访问器,toString。复杂的属性我们需要单独去处理。:-- 调用下一个查询语句。复杂的属性我们需要单独去处理。在集合中的泛型信息,我们使用。查询每个学生的对应的老师。(实体类与第一种形式相同)-- 两个表的关联字段。一般项目用这种就行。为复杂属性设置类类型。查询每个老师有多少学生。

m0_75163045的博客 948

mybatis多对一处理两种处理方式

1.Teacher.java public class Teacher { private int id; private String name; //省略getter、setter及toString方法 } 2.Student.java public class Student { private int id; private String name; priva...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值