MyBatis使用resultMap解决1对多关联映射

2023-11-15

案例:查询MySQL中user表和orders表所有用户信息及用户关联的订单信息,
用户信息和订单信息为一对多关系。

SELECT
	u.id,
	u.username,
	u.birthday,
	u.sex,
	u.address,
	o.id oid,
	o.number,
	o.createtime,
	o.note
FROM
	`user` u
LEFT JOIN `orders` o ON u.id = o.user_id

在这里插入图片描述
1:在User类中加入 List < Order > orders属性:

public class User {
	private List<Order> orders;
	public List<Order> getOrders() {
		return orders;
	}
	public void setOrders(List<Order> orders) {
		this.orders = orders;
	}
}

2:在UserMapper.xml添加sql:

<resultMap type="User" id="userOrderMap">
		<id column="id" property="id" />
		<result column="username" property="username" />
		<result column="birthday" property="birthday" />
		<result column="sex" property="sex" />
		<result column="address" property="address" />
		<collection property="orders" javaType="list" ofType="Order">
			<id column="oid" property="id" />
			<result column="number" property="number" />
			<result column="createtime" property="createtime" />
			<result column="note" property="note" />
		</collection>
	</resultMap>
	<select id="queryAllUserAndOrder" resultMap="userOrderMap">
		SELECT
		u.id,
		u.username,
		u.birthday,
		u.sex,
		u.address,
		o.id oid,
		o.number,
		o.createtime,
		o.note
		FROM
		`user` u
		LEFT JOIN `orders` o ON u.id = o.user_id
	</select>

3:编写UserMapper接口:

public List<User> queryAllUserAndOrder();

4:单元测试:

public class MyBatisTest {
	SqlSessionFactory factory = null;
	private UserMapper userMapper = null;

	@Before
	public void testInit() {
		// 1. 创建SqlSessionFactoryBuilder对象
		SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
		// 2. 加载SqlMapConfig.xml配置文件 
		InputStream in = MyBatisTest.class.getResourceAsStream("/SqlMapConfig.xml");
		// 3. 创建SqlSessionFactory对象
		factory = builder.build(in);

	}
   @Test
	public void testqueryAllUserAndOrder(){
		SqlSession session = factory.openSession();
		UserMapper mapper = session.getMapper(UserMapper.class);
		List<User> users = mapper.queryAllUserAndOrder();
		System.out.println(users);
	}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatis使用resultMap解决1对多关联映射 的相关文章

随机推荐

  • oracle 基础:表操作

    创建表 示例 CREATE TABLE 表名称 字段名 类型 长度 primary key 字段名 类型 长度 修改表 增加字段 ALTER TABLE 表名称 ADD 列名 1 类型 DEFAULT 默认值 列名 2 类型 DEFAULT
  • MYSQL--基础--05--binlog日志文件过大

    MYSQL 基础 05 binlog日志文件过大 1 Mysql binlog 介绍 mysql binlog是MySQL数据库的二进制日志 用于记录用户对数据库操作的SQL语句 除了数据查询语句 信息 如果mysql 运行很长一段时间 日
  • 汇编语言aaa指令解析,aas指令解析

    aaa指令本质上是将相加后的结果拆成两个部分 拆成非压缩BCD码的形式 下面进行举例介绍 1 ah 0 al 06h bl 09h 执行指令add al bl得ah 01h al 05h aaa的作用就是将相加后al中的结果15拆分成两部分
  • python-opencv对极几何 StereoRectify

    OpenCV如何正确使用stereoRectify函数 函数介绍 用于双目相机的立体校正环节中 这里只谈谈这个函数怎么使用 参数具体指哪些 函数参数 随便去网上一搜或者看官方手册就能得到参数信息 但是 相对关系非常容易出错 这里详细解释一下
  • 电脑提示vcruntime140_1.dll缺少怎么办?

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个vcruntime140 1 dll文件进行安装
  • Alpaca构建方式探秘:低成本构造指令数据增强LLM

    官方介绍 Alpaca A Strong Replicable Instruction Following Model github地址 https github com tatsu lab stanford alpaca Alpaca简介
  • 【STL】list容器的插入与删除

    STL list容器插入与删除 添加或插入新元素 list成员方法 push front 向 list 容器首个元素前添加新元素 push back 向 list 容器最后一个元素后添加新元素 emplace front 在容器首个元素前直
  • 基于LSTM、BP神经网络实现电力系统负荷预测(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 LSTM 2 2 BP 3 Python代码及数据 4 参考文献 1 概述 前馈神经
  • JavaSE加强知识

    tips 在Java中 万物皆对象 不然我们的Java就白学了 本栏文章我们将会陆续上传以下知识 static 单例 代码块 继承 面向对象五大金刚 成员变量 方法 代码块 构造器 内部类 权限修饰符 抽象类 接口 多态 内部类 常用API
  • DDR3 终端参考电阻 rzq

    https blog csdn net chenzhen1080 article details 82951214 问题1 ddr3侧 的参考电阻和 FPGA侧 的参考电阻是不是同一个功能 同一个阻值 DDR3 器件上 要标配 240 参考
  • SGMD辛几何模态分解

    将时间序列分解为一组独立的模态分量 模态混叠情况大幅度降低 SGMD利用辛几何相似度变换来求解哈密顿矩阵的特征值 并利用其 相应的特征向量来重构单分量信号 同时 SGMD可以在没有任何用户定义参数的情况下 有效地重构现有的模式 去除噪声 该
  • Halcon中数据的四舍五入、取整、有效数字以及和字符串之间的转换

    a 3 456 取整 取最近的整数 int a int a 取整数部分 结果是3 round a round a 将输入元组转换为最接近的整数元组 结果是3 四舍五入 结果是字符串 g0 a 0f 保留0位 结果是 3 g1 a 1f 保留
  • js延迟操作

    在写前端代码的时候需要实现某些交互操作 有些效果需要停顿几秒再实现 这时可以用到下面的方法 setTimeout function 5秒后实现的方法写在这个方法里面 5 1000 延迟5000毫秒
  • 第15届全国大学生知识竞赛 2022ciscn初赛 部分wp

    Misc ez usb 1 键盘流量 USB协议数据部分在Leftover Capture Data域中 数据长度为八个字节 其中键盘击键信息集中在第三个字节中 如图 发现击键信息为0x06 即对应的按键为C 2 鼠标流量 USB协议鼠标数
  • 并发编程-Linux环境下C语言并发理解-一

    在centos7上安装gcc 使用yum命令安装还是非常easy的 yum y install gcc gcc c kernel devel 安装gcc c 编译器以及内核文件 使用VI工具编写如下代码 include
  • openssl命令基础用法:哈希

    单向加密需要使用的标准命令为 dgst 用法如下 openssl dgst md5 md4 md2 sha1 sha mdc2 ripemd160 dss1 c d hex binary out filename sign filename
  • 微信小程序项目:粤语教学平台-粤言粤语

    文章目录 1 项目简介 1 1 创意来源 1 2选题意义 2 总体设计 2 1 系统功能 2 1 1 功能概述 2 1 2 功能说明 2 2 系统软硬件平台 2 3 关键接口技术 2 4 作品特色 3 详细设计 3 1 系统结构设计 3 1
  • error C2666: “QByteRef::operator ==”: 2 个重载有相似的转换

    出现这样的问题 就是语法出现问题 以下写就是错的 以下写的就是解决了问题
  • 树莓派使用上spi tft!(fbtft的使用)

    关于树莓派的视频输出除了HDMI和 VNC基本上没有其他的方法 如果你手上刚好有一块TFT模块的话就可以当做系统显示屏 framebuff 虽然分辨率不高 但足以满足一些cmd的需求 github上项目 notro fbtft 很好的实现了
  • MyBatis使用resultMap解决1对多关联映射

    案例 查询MySQL中user表和orders表所有用户信息及用户关联的订单信息 用户信息和订单信息为一对多关系 SELECT u id u username u birthday u sex u address o id oid o nu