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

【JavaEE】MyBatis resultMap与resultType 多表查询 (一对一 + 一对多) 详解 【JavaEE】MyBatis resultMap与resultType 多表查询 (一对一 + 一对多) 详解 阅读详情

一:搭建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实体       2:创建mapper     3:创建映射       4:写测试类    5:运行结果)

1:创建Orders实体

package com.biem.pojo;

import lombok.*;

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

        创建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

orders

package com.biem.Mapper;

import com.biem.pojo.Orders;

public interface OrdersMapper {
    public Orders findOrdersById(int id);

}

        Users

package com.biem.Mapper;

import com.biem.pojo.Users;

public interface UsersMapper {

    public Users findUserById(int id);
}

3:创建映射

orders

<?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="selectOrders" parameterType="Integer" resultType="Orders">
        select * from tb_orders where user_id=#{userId}
    </select>


</mapper>

        users

<?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">

    <resultMap id="usersWithOrders1" type="Users">
        <id property="id" column="id"></id>
        <result property="username" column="username"/>
        <result property="address" column="address"/>
        <collection property="ordersList" javaType="ArrayList" ofType="orders" select="com.biem.Mapper.OrdersMapper.selectOrders" column="id"/>
    </resultMap>

    <!-- public Users findUserById(Integer id); -->
    <select id="findUserById" parameterType="Integer" resultMap="usersWithOrders1">
        select * from tb_user where id = #{id}
    </select>

</mapper>

4:写测试类

package com.biem.test;

import com.biem.Mapper.UsersMapper;
import com.biem.Util.MybatisUtil;
import com.biem.pojo.Users;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

public class UsersTest {


    @Test
    public void testFindUserById() {
        SqlSession session = MybatisUtil.openSession();
        UsersMapper mapper = session.getMapper(UsersMapper.class);
        Users user = mapper.findUserById(1);
        System.out.println("user = " + user);
        session.close();
    }


}

5:查看运行结果

 

ArcGIS拓扑检查实战:5分钟搞定面重叠与缝隙问题(附详细截图) 本文详细介绍了如何使用ArcGIS进行拓扑检查,快速解决面重叠与缝隙问题。通过搭建拓扑检查环境、配置拓扑规则、五步闪电修复法及批量处理技巧,帮助用户高效完成数据修正,提升GIS数据质量。特别适合地籍管理、规划红线等场景应用。 阅读详情

相关推荐

保姆级教程:用安卓手机+IP摄像头App,5分钟搭建一个免费的RTSP监控测试环境

本文提供了一份详细的保姆级教程,教你如何利用安卓手机和IP摄像头App在5分钟内搭建免费的RTSP监控测试环境。通过零成本方案,开发者可以快速获取实时视频流,适用于计算机视觉、物联网开发等多种场景。教程涵盖工具选型、配置详解、电脑端测试及OpenCV集成,助你高效完成开发测试。

weixin_27419879的博客 276

Spring Boot 整合 Mybatis 笔记(三):ResultMap详细解说,一对一、一对多、多对多

上面中使用了 association 这个元素,定义关联对象的封装规则 ,实现关联属性的查询,使用 association 定义关联的单个对象的封装结果。resultMap 将字段名和属性名对应起来,进行手动配置封装,将结果映射到 pojo 中, resultMap 是 Mybatis 最强大的元素,它可以将查询到的复杂数据(比如查询到几个表中数据)映射到一个结果集当中。resultType 可以把查询结果封装到pojo类型中,但必须 pojo 类的属性名和查询到的数据库表的字段名一致。

minihuabei的博客 3839

天池长期赛:二手车价格预测(422方案分享)

本次比赛是一次很好的锻炼数据挖掘能力的入门赛,从EDA-数据清洗-特征工程-模型调参-模型融合,能够完整的学习到大数据的分析和挖掘,值得历练。

weixin_46685991的博客 1万+

MyBatis自定义映射resultMap,处理一对多,多对一

MyBatis的自定义映射resultMap,一对多,多对一

weixin_60664694的博客 1851

OpenCV实战:5分钟搞定图像拼接(附Python代码)

本文通过OpenCV实战教程,详细讲解如何使用Python在5分钟内完成图像拼接。重点介绍`findHomography`函数和单应性矩阵的应用,提供完整的代码示例和常见问题解决方案,帮助开发者快速掌握图像拼接技术。

weixin_26833503的博客 121

【Python_Zebra斑马打印机编程学习笔记(二)】基于BarTender将btw文件转换为zpl文件

本文介绍如何基于 BarTender 软件将 btw 格式的文件转换为 zpl 格式的文件,有需要的读者可以点赞收藏,也欢迎在评论区进行讨论。

禾戊之昂的博客 3378

Mybatis 复杂结果映射(ResultMap) - 一对多关系映射

使用Mybatis中resultMap标签的复杂结果映射解决一对多关系中复杂的数据映射问题。

Mointor 1261

信息传输仿真:卫星通信系统仿真_(12).卫星通信系统仿真软件介绍

卫星通信系统仿真软件是进行卫星通信系统设计和性能优化的重要工具。通过这些软件,用户可以模拟和分析各种通信场景,验证不同的通信协议和算法,优化系统参数和配置。本节介绍了 MATLAB Simulink、NS-3、OPNET 和 SystemVue 的基本功能、特点和配置方法,希望对读者在选择和使用仿真软件时提供参考。在实际应用中,建议根据项目需求和团队能力,综合考虑选择合适的仿真软件。

2401_87715305的博客 1281

MyBatis——使用 resultMap 配置一对一、一对多关系详解

MyBatis——使用resultMap 映射一对一、一对多问题详解 ##### 1. MyBaits简介 > MyBatis 是一个优秀的持久层框架,它对 jdbc 的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需 要花费精力去处理例如注册驱动、创建 connection、创建 statement、手动设 置参数、结果集检索等 jdbc 繁杂的过程代码。Mybatis 通过 xml 或注解的方 式将要执行的各种 statement(statement、preparedStat

suitianshuang 8589

Python 爬虫实战:攻克小红书种草笔记,抓取美妆好物推荐数据

通过本次 Python 爬虫实战,我们成功地从小红书爬取了美妆种草笔记的数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分笔记的数据,且未对笔记中的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多笔记的数据,并深入分析笔记中的多媒体内容、用户行为模式等,为美妆品牌和消费者提供更有价值的数据支持。

u014481728的博客 3272

朱长江《偏微分方程简明教程》答案第一章部分

偏微分方程简明教程第一章习题1.1 第一章 习题1.1 1、指出下列方程的阶,并判断它是线性的还是非线性的。如果是线性的,说明它还是其次的: (1)ut−(uxx+uyy)+1=0;(2)ut−uxx+xu=0;(3)ut−uxxt+uux=0;(4)ux2+uuy=0;(5)utt−uxx+t2+x2=0;(6)ux+eyuy=0;(7)ut+uxxxx+1+u=0;(8)ux(1+ux2)−12+uy(1+uy2)−12=0;(9)∂4u∂x4+2∂4u∂x2∂y2+∂4u∂y4=0;(10)∂3u∂x

ymengm的博客 6761

Springboot——Mybatis实现一对一、一对多查询

文章目录前言环境项目搭建依赖引入配置文件编写一对一测试(association )测试1null问题解决一对多测试(collection)总结代码参考 前言 写这篇博客之前呢,查看了下已经写过的博客,感觉针对于Mybatis的使用都太过简单。总觉得少了点什么,于是决定补充一下Mybatis中关联查询时,ResultMap配置写一对一、一对多的使用案例。 环境 本次测试采取Springboot 2.1.4.RELEASE结合mybatis 1.3.0进行测试。 项目搭建 依赖引入 主要引入Springboot

专注写bug 1981

ZYNQ USB按键读写操作详解:从裸机到Linux系统的完整实现

USB接口在现代嵌入式系统中扮演着至关重要的角色,而按键作为最基础的人机交互设备,其与USB的结合能够实现丰富的应用场景。这种实现不仅适用于简单的键盘应用,还可以扩展为游戏控制器、专业输入设备或工业控制面板,展现了ZYNQ在嵌入式USB应用中的强大灵活性。:USB控制器需要准确的时钟源,通常使用外部33MHz晶振,并在Vivado中正确配置。结合ZYNQ的PL(可编程逻辑)和PS(处理系统)优势,可以创建创新的USB按键应用。本文详细介绍了在ZYNQ平台上实现USB按键读写的完整方案,涵盖了从。

QQ_778132974的博客 379

4.一对一查询和一对多查询

1.一对一查询 User.java UserRole.java UserDao.java //一对一 public List<User> getAllUsers3(); UserMapper.xml <!-- 一对一查询关联映射(常用) --> <resultMap type="User" id="userMap2"> <id pr...

CC的博客 416

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

第三讲:Mybatis关联映射

第三讲:Mybatis关联映射 回顾: parameterType:指定输入参数的数据类型 单个参数:(建议在语句标签上添加该属性) ​ 简单类型数据:所有的基本数据类型(包括包装类型)和引用类型(String和其他内置API的类型如Date) ​ 参数在语句中的使用:通过#{参数名}获取输入参数的值,当然#{}中参数名可以自定义 ​ 复杂类型数据:对象类和Map类型 ​ 参数在语句中的使用:通过#{属性名}或#{map的key值}获取输入参数的值 多个参数:(建议在标签中不设置属性) ​ 不建

weixin_45762627的博客 225

SAP B1中文培訓教材_SDK

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

Mybatis的关联映射

通过mybatis实现表的关联映射,通过一下几步 一、使用ddl和dml语言创建MySQL中的学生表和老师表 1、学生表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for student -- ---------------------------- DROP TABLE IF EXISTS `student`; CREATE TABLE `st

qq_61353850的博客 468

MyBatis基础入门6:关联映射

关联映射的本质就是连表查询,用于多对一和一对多的表结构。 首先我们来新建两张表,student表和teacher表,在这里我们规定一个老师可以对应多个学生,而一个学生只能对应一个老师。 多对一查询 我们创建对应的实体类 连表查询 <select id="selectStudentTeacher" resultMap="StudentTeacher"> SELECT student.*,teacher.Tname from student..

weixin_43183850的博客 2848

MyBatis联表查询

student 表:存储学生信息,包含字段(主键)、(姓名)、(性别)、(年龄)、(关联教师 ID) teacher 表:存储教师信息,包含字段(主键)、(教师姓名) 一 创建新实体类(最常用) MyBatis 映射配置 实体类设计 字段映射:StudentTeacher 类的属性与查询结果字段一一对应 类型问题:字段在数据库中为,但实体类中定义为,可能导致类型不匹配(需注意) 测试方法 功能:调用 Mapper 接口方法执行查询,并打印所有学生 - 教师关联信

m0_61261153的博客 963

Mybatis 二(1)之高级映射(&延迟加载)

1. 一对一查询: users——用户表(id、username、age) items——商品表(id、name、price、detail、pic、createtime) orders——订单表(id、user_id、number、createtime、note) orderdetail——订单信息表(id、orders_id、items_id、items_num) ① users——order...

Karen博客 229

双表查询java代码_【框架】118:mybatis之多表高级查询

今天是刘小爱自学Java的第118天。感谢你的观看,谢谢你。学习内容安排如下:补充说明知识点:resultMap,sql片段。mybatis中的高级查询,即多表关联查询。主要分为:一对一查询,一对多查询,多对多查询,本来打算全学完的,奈何计划赶不上变化。一、知识点补充1resultMap又要提到前面那个说了好几遍的起别名问题了,使用resultMap标签也能解决这个问题。当然该标签最主要的应用还是...

weixin_42393342的博客 122

关于mybatis一对多和多对一

Student public class Student { private int id; private String name; private int tid; //老师是一个对象 private Teacher teachers; student里面有teacher对象 teacher public class Teacher { private int tid; private String name; //学生表是一个集合 List<S

m0_57580977的博客 100

SSM——6.Mybatis的关联映射

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

m0_52096593的博客 1466

第二讲:Mybatis关联映射

第二讲:Mybatis关联映射 回顾: parameterType:指定输入参数的数据类型 单个参数:(建议在语句标签上添加该属性) ​ 简单类型数据:所有的基本数据类型(包括包装类型)和引用类型(String和其他内置API的类型如Date) ​ 参数在语句中的使用:通过#{参数名}获取输入参数的值,当然#{}中参数名可以自定义,但是一般都是使用方法参数名 ​ 复杂类型数据:对象类和Map类型 ​ 参数在语句中的使用:通过#{属性名}或#{map的key值}获取输入参数的值 多个参数:(建议在

weixin_45762627的博客 429

MyBatis的关联映射

结果映射(resultMap)–主要使用这两个标签association – 一个复杂类型的关联;许多结果将包装成这种类型嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用collection – 一个复杂类型的集合嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用。

yandao的博客 1290

Mybatis(三)

mybatis使用介绍

远飞的梦的博客 408

书名《MyBatis 核心技术全解与项目实战》原书 读书详细笔记 (第4章)

在 MyBatis 中通过 resultMap 实现自定义结果映射。简单来说,我们在 <select> 标签中利用 resultMap 替代 resultType,可以自行决定将表中的字段映射成 POJO 的哪个属性。请注意,在 <select> 标签中不能同时使用 resultMap 和 resultType。一般而言,符合开发规范的简易查询使用 resultType,需自定义结果映射时使用 resultMap。resultMap 的常用属性及其作用如表 4-1所示。

本博主是 Java 全站工程师(后端+前端+运维),当然也是 C/C++ 程序员; 1019

mybatis级联查询

mybatis级联操作(一对一及一对多)

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值