Mybatis最入门---ResultMaps实例篇(一对多查询)

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

[一步是咫尺,一步即天涯]

接上文,我们来演示在实际开发中,如何配置和使用resultMap实现一对多查询。

准备工作:

a.操作系统 :win7 x64

b.基本软件:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基础

特别的,作为演示程序,还请各位看官不要纠结数据库的细节内容

-------------------------------------------------------------------------------------------------------------------------------------

1.首先,复制上文工程,重命名为Mybatis05,工程结构图如下:


2.上文中,我们演示了:一个人对应一条个人信息。但是,如果我们根据部门来查询用户的话,就是典型的一对多的关系了。为了演示一对多关系查询的实现,我们需要现在数据库中,创建一个部门表。所有表结构如下:


各表中的数据如下:



3.鉴于篇幅的关系,重复的文件请各位看官参照上文创建,这里我们只说明有修改的文件。

4.新增Departments.java文件,具体内容如下:

package com.csdn.ingo.entity;

import java.io.Serializable;
import java.util.List;

/**
*@author 作者 E-mail:ingo
*@version 创建时间:2016年4月21日下午9:07:15
*类说明
*/
@SuppressWarnings("serial")
public class Departments implements Serializable{
	
	private String id;
	private String departmentName;
	private List<UserInfo> userInfos;
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getDepartmentName() {
		return departmentName;
	}
	public void setDepartmentName(String departmentName) {
		this.departmentName = departmentName;
	}
	public List<UserInfo> getUserInfos() {
		return userInfos;
	}
	public void setUserInfos(List<UserInfo> userInfos) {
		this.userInfos = userInfos;
	}
	public Departments(String id, String departmentName, List<UserInfo> userInfos) {
		super();
		this.id = id;
		this.departmentName = departmentName;
		this.userInfos = userInfos;
	}
	public Departments() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Departments [id=" + id + ", departmentName=" + departmentName + ", userInfos=" + userInfos.toString() + "]";
	}
	
}
5.新增DepartmentsDao.java文件,具体内容如下:

package com.csdn.ingo.dao;

import com.csdn.ingo.entity.Departments;

/**
*@author 作者 E-mail:ingo
*@version 创建时间:2016年4月21日下午9:09:33
*类说明
*/
public interface DepartmentsDao {
	Departments findDepartmentById(String id);
}
6.新增DepartmentsDaoMapper.xml文件,具体内容如下:

<?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 namespace="com.csdn.ingo.dao.DepartmentsDao">
	<resultMap type="Departments" id="DepartmentsResult">
		<id property="id" column="id" />
		<result property="departmentName" column="departmentName" />
		<collection property="userInfos" column="id" select="com.csdn.ingo.dao.UserInfoDao.findUserInfoByDepartmentId"></collection>
	</resultMap>
	<select id="findDepartmentById" parameterType="String" resultMap="DepartmentsResult">
		select * from departments where id=#{id}
	</select>
</mapper> 
7.修改UserInfoDao.java,具体内容如下:

public interface UserInfoDao {
	UserInfo findUserInfoById(String id);

	UserInfo findUserInfoByDepartmentId(String id);
}
8.在UserInfoMapper.xml,新增如下内容:

<select id="findUserInfoByDepartmentId" parameterType="String" resultMap="UserInfoResult">
		select * from userinfo where department=#{id}
	</select> 
9.新增单元测试方法:

@Test
	public void testSeletDepartment() {
		DepartmentsDao userDao = sqlSession.getMapper(DepartmentsDao.class);
		String id = "2";
		Departments curUser = userDao.findDepartmentById(id);
		if(curUser!=null){
			log.info("成功找到用户:"+curUser.toString());
		}
10.测试方法,运行单元测试方法,观察控制台有如下输出:


成功找到用户:Departments [id=2, departmentName=销售部, userInfos=[UserInfo [userid=customer, department=2, position=售前, mobile=33334444, gender=1, email=customer@email.com], UserInfo [userid=customer2, department=2, position=售后, mobile=55556666, gender=1, email=customer@email.com]]]
 INFO [main] - 方法执行后调用
鉴于截图大小的关系,我们单独给出运行结果,请各位读者做参考。

--------------------------------------------------------------------------------------------------------------------------------------------------------

特别的:请读者特别关注表之间的关系,resultMap的书写方式,collection的书写方式,column的配置,如有疑问,请参考前面《Mybatis最入门---ResultMaps高级用法(上)》中的内容

--------------------------------------------------------------------------------------------------------------------------------------------------------
如果又细心的读者,或许已经发现,我们设计的表结构关系是user表--->userinfo表--->departments表。换句话说,我们使用user表中的变量是无法查到部门表的信息的。另外,我们实际也遇到这样的例子,人员的属性中存在多个集合属性,如,基本信息是一个集合,兴趣爱好是一个集合等等。有时为了完整的描述一个对象,需要使用多个集合属性来描述。因此,我们在这里在演示一个对象中多个集合的查询操作的实现。

1.首先,我们要在User中增加department属性,如下:【注意:我们只修改对象,并没有修改数据库】

@SuppressWarnings("serial")
public class User implements Serializable{
	
	private String id;
	private String password;
	private UserInfo userInfo;
	private Departments department;
//....set
//...get
//...构造函数
//..toString()
}
2.修改UserMapper.xml中的resultMap,修改之后的内容为:

<resultMap type="user" id="UserResult">
		<id property="id" column="id" />
		<result property="password" column="password" />
		<association property="userInfo" column="userid"
			select="com.csdn.ingo.dao.UserInfoDao.findUserInfoById"></association>
		<association property="department" column="department"
			select="com.csdn.ingo.dao.DepartmentsDao.findDepartmentById"></association>
	</resultMap>
3.新建单元测试方法,如下:

	@Test
	public void testSeletDepartmentAndInfo() {
		try{
		UserDao userDao = sqlSession.getMapper(UserDao.class);
		String id = "admin";
		User curUser = userDao.findUserInfoById(id);
		if(curUser!=null){
			log.info("成功找到用户:"+curUser.toString());
		}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

4.测试方法:运行单元测试,观察控制台输出,有如下结果;


完整输出为:

成功找到用户:User [id=admin, password=admin, userInfo=UserInfo [userid=admin, department=1, position=工程师, mobile=11112222, gender=1, email=admin@email.com], department=Departments [id=1, departmentName=开发部, userInfos=[UserInfo [userid=admin, department=1, position=工程师, mobile=11112222, gender=1, email=admin@email.com]]]]
 - 
输出内容仅供参考,各位看官只要看到类似输出即可。
-------------------------------------------------------------------------------------------------------------------------------------

至此,Mybatis最入门---ResultMaps实例篇(一对多查询)结束


特别备注:

这两篇的实例,请各位看官一定手动敲一遍,遇到不懂配置的地方请查看前文详细说明。



Mybatis最入门---ResultMaps实例篇(一对一查询) [一步是咫尺,一步即天涯] 前面我们花了两篇文章的篇幅叙述了Mybatis中最核心的resultMap配置,本文开始,我们来演示在实际开发中,如何配置和使用resultMap提供给我们强大功能。 准备工作: a.操作系统 :win7 x64 b.基本软件:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基础 特别的,作为演示程序,还请各位看官不 阅读详情

相关推荐

BERT + BiLSTM-CRF 处理流程

BERT是一个基于 Transformer 的预训练语言模型。与传统的语言模型不同,BERT 是双向的,即它同时利用上下文信息进行词表示学习。BERT 在大规模语料库上进行预训练,可以捕捉到深层次的语言知识和上下文关系,生成非常丰富的词向量表示。在序列标注任务中,BERT 被用作输入文本的编码器,将每个词映射为上下文相关的词嵌入(embeddings)。

AI Agent 首席体验官 2258

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

1:创建Orders实体 2:创建mapper 3:创建映射 4:写测试类 5:运行结果)1:创建Orders实体。2:创建mapper。三:创建查询映射 与 代码补齐。三:创建查询映射 与 代码补齐。二:数据库准备(一对多查询)一:搭建mybatis框架。1:创建Orders实体。2:创建mapper。

Humility1的博客 387

图像传感器与信号处理——详解CCD与CMOS图像传感器

一文详解CCD与CMOS图像传感器一文详解CCD与CMOS图像传感器1. 图像传感器性能关键词1.1 噪声1.2 暗电流 一文详解CCD与CMOS图像传感器 本文主要总结了CCD与CMOS传感器的原理知识,参考书籍为《数码相机中图像传感器和信号处理》,英文版为《Image Sensors And Signal Processing for Digital Still Cameras》 1. 图像传...

weixin_44580210的博客 2万+

6.2 、MyBatis 高级映射(resultMap 标签多表联查 , 一对多,多对一关系)

6.2 、MyBatis 高级映射(resultMap 标签多表联查 , 一对多,多对一关系)

shiyu_951的博客 2620

maxwell与steady state thermal 通过workbench耦合仿真

文章目录maxwellsteady state thermal maxwell 1加入maxwell并打开 2导入模型 3选择求解器类型:涡流求解器eddy current 4修改模型名字不能带_等特殊符号 5为模型赋材料 6设立3D边界,各边电流进出方向为0其余方向300 7设置激励条件,可设置电流大小,相位,方向 8设置集肤深度,选取中间铜导体的体然后设置,如何设置看帮助文档 9求解设置 迭代步数 收敛精度 交流电频率 10验证条件满足计算 11求解 发现无法求解,删除ai

roymustang的博客 9202

基于MobileNet⁃DOA的无人机射频信号识别方法

本文提出了一种基于MobileNet-DOA模型的无人机射频信号识别方法,用于解决低信噪比环境下无人机型号和飞行模式识别率低的问题。该方法首先采用变分模态分解(VMD)进行信号预处理以降低噪声干扰,然后通过短时傅里叶变换(STFT)将信号转换为时频图。在模型设计上,将DOConv卷积融入MobileNetv4模型以增强特征提取能力并提高运算速度,同时引入FA注意力机制提升低信噪比环境下的识别精度。实验结果表明,该方法在-15~15dB信噪比范围内的平均识别准确率达到94.83%,显著优于现有方法,特别在-1

qq_43416206的博客 1349

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

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

minihuabei的博客 3839

Windows环境下Ollama的本地部署方案

本文主要介绍了Windows环境下Ollama的本地部署方案,希望对使用大语言模型的同学们有所帮助。 文章目录 1. 前言 2. Windows环境安装 3. API调用示例代码

herosunly的博客 11万+

resultMap的一对多联合查询

前言 最近做一个问卷系统的项目,问卷系统包含了三部分,问卷、问题、问题选项,然后呢为了给前端数据,就要把这部分数据一起查出来,所以为了解决这个问题呢,就想到了使用resultMap但是没做过resultMap中嵌套resultMap的,所以呢就度娘一通,解决了这个问题,但是自己也要记录下来,好记性不如烂笔头!!! 表结构如下: 一个survey跟question是一对多, question与o...

qq_40126996的博客 891

AUTOSAR&UDS 理论要点及isolar实战-DEM模块

从这节开始,将讲解UDS诊断中非常重要的知识点:故障事件触发、故障信息上报、故障信息处理、故障信息存储和故障系统降级,后续会陆续更新。

cqaa11的博客 553

015、架构_配置文件_管理节点(proxymanager.ini)

该配置文件中的参数在后台配置,两种生效方式:*所有参数重启生效。*部分参数可以使用工具dbtool动态生效。动态生效命令为:dbtool-pm-load-config。配置文件“proxymanager.ini”用于设置元数据管理模块的信息。文件路径为“~/etc”。配置文件“proxymanager.ini”是普通的文本文件。默认值proxymanager-alarmconfutf8.txt。配置错误或不配置,PM无法连接MDS,无法服务。获取元数据失败超时处理时间。异常时请求启动对等回滚。

Oracle/MySQL 到 国产信创数据库|迁移 · 调优 · 信创替换 329

MyBatis的ResultMaps

ResultMaps经常用于映射SQL的查询语句,将查询的结果与JavaBean的参数相对应。 我们可以定义ResultMaps和从多个查询的语句中引用它的resultMap查询。MyBatis的ResultMapps是有非常强大的特性,你可以用它查询一对一、一对多的表关系。可能,读者对这样的表述不是很明白,学习了接下的知积之后你就可以明白了。 1. 简单的ResultMaps 下面的例子是

owen_william的博客 922

【国产MCU】-认识CH32V307及开发环境搭建

CH32V307是[沁恒](https://www.wch.cn/)推出的一款基于32位RISC-V设计的互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,电机定时器到4组。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,以太网MAC升级到千兆并集成了10M-PHY模块。

视觉与物联智能 2346

MyBatis的ResultMaps之一对多关系

1. 一对多的关系 在我们的例子中,我们的教师可以教一个或多个的课程,这就意味着教师与课程之间的关系是一对多的。我们可以运用元素来获取一对多的关系。 教师的表信息如下: 课程表信息如下: 在上面的表信息中,我们的教师John拥有一门课程,但是我们的教师Ying却有两门课程。下面是教师和课程的JavaBean。 public class Course { private

owen_william的博客 7056

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Mybatis最入门---ResultMaps高级用法(上)

[一步是咫尺,一步即天涯] 接上文,我们基本的单表查询使用上文中的方式已经能够达到目的。但是,我们日常的业务中也存在着多表关联查询,结果是复杂的数据集合等等。本文我们就来介绍ResultMaps的高级用法,本文,我们先介绍基本的概念,具体用法实例在下一篇中专门演示给大家。敬请期待 ---------------------------------------------------------

y-yg的博客 3万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Mybatis最入门---ResultMaps基本用法

[一步是咫尺,一步即天涯] 本文,我们来介绍Mybatis中最重要的最强大的元素。使用resultMap的使用能够将我们查询数据的结果集合在书写配置时一劳永逸。并且,其能够支持复杂的数据类型。废话不多讲,开始正文部分吧! ---------------------------------------------------------------------------------------

y-yg的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

MyBatis的ResultMaps之一对一关系

1. 一对一关系 在我们domain的包中,每一个student都关联了一个地址。STUDENT的表中拥有ADDR_ID的列这个是作为ADDRESS表的外主键。 STUDENT表的信息如下: ADDRESS表的信息如下: 让我们来看一下如何通过获取Student信息包括Adress信息。 public class Address { private Integer a

owen_william的博客 2619

MyBatis入门指南

MyBatis 是一个支持定制 SQL、存储过程及高级映射的持久层框架。本文介绍了如何使用 MyBatis 查询数据库中的 user 表数据。首先,创建 user 表并插入数据,接着导入 MyBatis 依赖,编写核心配置文件和 SQL 映射文件。然后,通过加载配置文件获取 SqlSessionFactory 对象,进而获取 SqlSession 对象执行 SQL 查询,最后释放资源。此外,还介绍了 MyBatis 的面向接口编程方式,通过定义 Mapper 接口与映射文件进行关联,并展示了如何传入参数进行

Hello World! 1153

Mybatis最入门---ResultMaps高级用法(下)

[一步是咫尺,一步即天涯] 接上文,本文我们继续来叙述Mybatis中resultMap的高级用法,类似的,我们先给大家叙述基本的概念及用法,具体实例在后文中再做演示,敬请期待! ------------------------------------------------------------------------------------------------------------

y-yg的博客 9694

MyBatis的ResultMaps实战

一配置 1 db.properties driver=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/mybatis username=root password=123456 2log4j.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log...

实践求真知 360
上一篇: Mybatis最入门---ResultMaps实例篇(一对一查询)
下一篇: Mybatis最入门---动态查询(if)
y-yg
博客等级 码龄15年 401粉丝 119原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值