SSM框架之_Mybatis入门笔记,详解快速上手(六):一对多与多对一查询处理

Java进阶 - MyBatis查询数据库 && Spring Boot 单元测试 - 细节狂魔 经过前的学习咱们 Spring 系列的基本操作已经实现的差不多了,接下来,咱们来学习更重要的知识,将前端传递的数据存储起来,或者查询数据库的数据。xml 文件,不能随便创建。我们在配置文件中,已经指定了 xml 文件存储路径。并且,命名规则也指定了。我们必须按照规则来。至于 xml 文件的配置内容,直接把下面的内容,拷贝到里面去。相信很多朋友,都会发现 mapper标签中的 namespace 属性,缺少value值。namespace 的值,是需要我们手动去填写的。 阅读详情

多对一处理


多对一:通过关联处理

一对多:通过集合处理

按查询嵌套处理


思路:根据学生信息中的老师信息->获取老师信息。

类似于sql中的子查询。


mapper.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.kuang.mapper.StudentMapper">

   <!--
   需求:获取所有学生及对应老师的信息
   思路:
       1. 获取所有学生的信息
       2. 根据获取的学生信息的老师ID->获取该老师的信息
       3. 思考问题,这样学生的结果集中应该包含老师,该如何处理呢,数据库中我们一般使用关联查询?
           1. 做一个结果集映射:StudentTeacher
           2. StudentTeacher结果集的类型为 Student
           3. 学生中老师的属性为teacher,对应数据库中为tid。
              多个 [1,...)学生关联一个老师=> 一对一,一对多
           4. 查看官网找到:association – 一个复杂类型的关联;使用它来处理关联查询
   -->
   <select id="getStudents" resultMap="StudentTeacher">
    select * from student
   </select>
   <resultMap id="StudentTeacher" type="Student">
       <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名-->
       <association property="teacher"  column="tid" javaType="Teacher" select="getTeacher"/>
   </resultMap>
   <!--
   这里传递过来的id,只有一个属性的时候,下面可以写任何值
   association中column多参数配置:
       column="{key=value,key=value}"
       其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。
   -->
   <select id="getTeacher" resultType="teacher">
      select * from teacher where id = #{id}
   </select>
</mapper>

当column中由有多参数时:用大括号括起来:
<resultMap id="StudentTeacher" type="Student">
   <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名-->
   <association property="teacher"  column="{id=tid,name=tid}" javaType="Teacher" select="getTeacher"/>
</resultMap>

按结果嵌套处理

思路:查询出结果,进行结果集映射。

类似结果中的联表查询。

<!--
按查询结果嵌套处理
思路:
   1. 直接查询出结果,进行结果集的映射
-->
<select id="getStudents2" resultMap="StudentTeacher2" >
  select s.id sid, s.name sname , t.name tname
  from student s,teacher t
  where s.tid = t.id
</select>

<resultMap id="StudentTeacher2" type="Student">
   <id property="id" column="sid"/>
   <result property="name" column="sname"/>
   <!--关联对象property 关联对象在Student实体类中的属性-->
   <association property="teacher" javaType="Teacher">
       <result property="name" column="tname"/>
   </association>
</resultMap>


一对多处理


按查询嵌套处理

<select id="getTeacher2" resultMap="TeacherStudent2">
select * from teacher where id = #{id}
</select>
<resultMap id="TeacherStudent2" type="Teacher">
   <!--column是一对多的外键 , 写的是一的主键的列名-->
   <!-- 一个students对应多个student,是一个集合 -->
   <collection property="students" javaType="ArrayList"ofType="Student" column="id" select="getStudentByTeacherId"/>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
  select * from student where tid = #{id}
</select>

按结果嵌套处理

<mapper namespace="com.kuang.mapper.TeacherMapper">

   <!--
   思路:
       1. 从学生表和老师表中查出学生id,学生姓名,老师姓名
       2. 对查询出来的操作做结果集映射
           1. 集合的话,使用collection!
               JavaType和ofType都是用来指定对象类型的
               JavaType是用来指定pojo中属性的类型
               ofType指定的是映射到list集合属性中pojo的类型。
   -->
   <select id="getTeacher" resultMap="TeacherStudent">
      select s.id sid, s.name sname , t.name tname, t.id tid
      from student s,teacher t
      where s.tid = t.id and t.id=#{id}
   </select>
<!-- 结果集映射 -->
   <resultMap id="TeacherStudent" type="Teacher">
       <result  property="name" column="tname"/>
       <collection property="students" ofType="Student">
           <result property="id" column="sid" />
           <result property="name" column="sname" />
           <result property="tid" column="tid" />
       </collection>
   </resultMap>
</mapper>

总结

关联:association,用于一对一和一对多的关系。

集合:collection,用于多对一的关系。

JavaType是用来指定pojo(实体类)中属性的类型。

ofType指定的是映射到list集合属性中pojo(实体类)的类型。

SSM框架下实现MyBatis连接查询,一对多和多对一 在SSM框架下实现的MyBatis的连接查询,一对多和多对一查询 阅读详情

相关推荐

快速上手Mybatis

快速上手Mybatis一、Mybatis快速入门1.添加Mybatis坐标2.创建数据表3.编写实体类4.编写映射文件5.编写核心文件6.编写测试类二、Mybatis增删改查1.增2.删3.改三、Mybatis核心配置文件概述四、Mybatis相应API五、Mybatis的Dao层实现1.传统模式2.接口代理模式六、Mybatis映射文件深入1.动态sql-if2.动态sql-foreach3.sql代码抽取七、Mybatis核心配置文件深入1.typeHandlers2.plugins标签八、Mybati

热爱生活の李 1865

05 MyBatis 动态SQL&&标签

一个查询的方法的Sql语句不一定是固定的。比如电商网站的查询商品,用户使用不同条件查询,Sql语句就会添加不同的查询条件。此时就需要在方法中使用动态Sql语句。 标签:、、、

m0_51697147的博客 2799

MyBatis 多表关联查询

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

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

【MyBatis 学习二】增删改查&& 参数占位符 #{} 和 ${}的使用

1、根据Id查询用户情况1:当只有一个参数的时候,可以加注解也可以不加。(1)不加注解:参数名可以任意:(2)加注解:@Param("uid"),xml文件也叫uid要对应。而Integer后的名字可以任意。(3)如果有多个参数:就必须加注解。2、插入数据情况1:不加注解情况2:加注解问题:怎么拿到自增Id?(1)useGeneratedKeys:这会令 MyBatis 使⽤ JDBC 的 getGeneratedKeys ⽅法来取出由数据库内部⽣成的主键(

qq_48479056的博客 797

用FPGA在HDMI上显示自定义字符:从COE文件到OSD叠加的保姆级教程

本文详细介绍了如何在FPGA上实现HDMI视频流的OSD字符叠加技术,从COE文件生成到动态区域控制的完整流程。通过Verilog代码示例和实战技巧,帮助开发者掌握字符ROM设计、像素坐标追踪和动态混合等核心技术,适用于视频监控、系统状态显示等应用场景。

weixin_28720767的博客 231

AWS 小白书 [1] 全球架构

小白应该知道的 AWS 知识

boshansolo的博客 707

Mybatis——传递参数&&自定义属性和字段的映射

1.参数传递 2.查询结果 3.特殊sql 4.resultMap

weixin_45483328的博客 4210

倍福ADS通讯协议深度解析——从握手到数据包的完整旅程

本文以工程师视角,通过Wireshark抓包实战,深度解析了倍福ADS通讯协议的完整工作流程。从TCP三次握手建立连接,到拆解AMS/TCP信封、AMS Header地址与命令解析,再到ADS Data读写请求的载荷构成,完整呈现了一次数据通讯的“旅程”。文章重点剖析了协议包格式,并结合实际案例,提供了基于协议分析的故障排查思路,帮助开发者深入理解并精准调试工业自动化系统通讯。

weixin_29231725的博客 152

MyBatis中动态SQL&&以及分页查询的几种方式详解

MyBatis支持动态SQL,即根据不同的情况生成不同的SQL语句。2.Where语句:可以使用where语句根据不同的条件拼接不同的SQL语句。在进行分页查询时,应用程序首先计算出 offset 和 limit 的值,然后将它们传递给 MyBatis 执行相应的 SQL 语句。基于应用程序的分页是在查询结果集合中进行分页的。综上所述,基于数据库的分页和基于应用程序的分页各有优缺点,具体使用哪种方式应根据实际情况进行选择。标签用于将一个定义好的SQL片段包含在另一个SQL语句中,以实现SQL语句的复用。

m0_58490785的博客 1939

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1161

MyBatis一对多,多对一,多对多

MyBatis中的一对多和对多一,多对多 主要就是resultMap中 association – 一个复杂的类型关联;许多结果将包成这种类型(一对多) collection – 复杂类型的集合(多对一) 这2个属性的使用,而一对多和多对一都是相互的,只是站的角度不同。实例: 这个实例只说这2个属性的使用方法,具体的配置和运行结果在SSM环境搭建文章中写出。 1.首先是数据库,沿用之前员

黄国攀的博客 4万+

renderdoc的使用

renderdoc可以用来捕获帧渲染情况,排查一些GPU渲染、资源规格等问题。 下面讲述一些该软件连接真机调试使用。 一、下载安装renderdoc 软件的下载地址:https://renderdoc.org/可直接点击下载即可。该软件是开源免费的,不用破解。 下载后直接安装即可使用。 二、打开使用renderdoc 打开界面后,默认的界面布局如下图所示,(这里我已经设置了黑色主题,可以忽略这点),renderdo中主要的窗口有Texture Viewer(纹理查看器)、Event B.

x_xingduo_2315的博客 2万+

【SSM框架】Mybatis详解11(源码自取)之表关联关系

本篇带你学习表关联关系,深入理解如何手动绑定数据。

muzi_longren的博客 2711

高通 Wi-Fi 驱动实录:MHI 协议中 Host 私有的数据结构

它那 16 字节的身体里,不仅装下了硬件返回的完成码(code)、传输长度(len),还装下了通道号(chid)和回指指针(ptr)。硬中断响应(mhi_irq_handler):需要特别注意的是,er_ctxt.msivec 和 mhi_event.irq 存储的是 MSI 向量索引(如 0, 1, 2...),而不是真正的 Linux IRQ 号!在它的内部,整段内嵌了两个 struct mhi_ring 实例:一个是处理硬件交互的 tre_ring,另一个则是默默在幕后记账的 buf_ring。

1042484520@qq.com(邮箱) 76

eNSP常见故障处理

eNSP无法启动设备一直停在#井号的问题的解决方案?

lvshiliang123的博客 2万+

[SSM] 一对多和多对一处理

数据库中有两个表 Teacher表:id,name(姓名) Student表:id,name(姓名),tid(老师的id) 新建两个实体类,学生和老师 @Data //GET,SET,ToString,有参,无参构造 public class Teacher { private int id; private String name; } @Data public class Student { private int id; private String name; } 一

浅夜 812

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ssm:多表关联查询(一对多,多对一,多对多)

1.一对多查询:关键点在于collection标签 一对多查询是指在查询一方对象的时候,同时将其所关联的多方对象也都查询出来。 一个班级有多个学生,一个学生只属于一个班级。 数据库student表里有个字段classno是外键,对应主键表class的主键cid 例:查询指定班级时,同时获取该班级的所有学生 关键代码:主配置文件mybatis-config.xml,映射文件ClassesMapper.xml mybatis-config.xml关键代码 <config> <!-- 注册属性

weixin_45873215的博客 4969

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

蓝牙模块HM-10手册

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

六万字最全总结Java数据库编程MyBatis(建议收藏)

相关代码已上传到Gitee,欢迎start! https://gitee.com/the_efforts_paid_offf/java/tree/master/ssm_db1资料:链接:https://pan.baidu.com/s/1FIDi_9QiTuhb4x7pksGOUQ 提取码:kevf​ MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理注册驱动、创建Connection、创建Statement、手动设置参数、

Maynor的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SSM框架(八)Mybatis多表查询【一对一、一对多、多对多】举例说明

目录序导语正文(1)一对一(2)一对多(3)多对多附 序 三种对象关系映射ObjectRelationshipMapping JDBC(数据库操作) student t_student studentId t_id Mybatis(半自动的ORM) Teacher XML/@ teacher–SQL teacherId teacher_id Hib...

cungudafa的博客 3326

ssm一对一,一对多,多对一,多对多关系

实体类 public class User { /** * id */ private Integer userId; /** * 用户名 */ private String userName; /** * card属性 */ private Card card; /** * 一个用户里面有多个订单 */ private List<Order> orde

qq_44770384的博客 926

SSM框架之Mybatis笔记08一对多和多对一

多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 数据库设计 CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO teacher(`id`, `name`) VALUES (1, '秦老师'); CRE

qq_43751506的博客 233

Mybatis 复杂查询(多对多、一对多、多对一)

我们知道,在 Mybatis 中完成单表查询是很容易的,而多表查询是 Mybatis 框架中的一个重难点,需熟练掌握。 文章目录1、多对多查询2、 一对多查询写法1写法23、多对一查询方式1方式24、总结 1、多对多查询 用户和小组为多对多的关系,需求为:通过用户 id 查找其所有的小组信息 数据库设计如下: 实体类: public class User { private int uId; private String uName; private List<Group.

qq_45716120的博客 1198

Mybatis——基于xml操作(一对多,多对一,多对多)

1. 关联查询:一对多 1.1 目标 查询用户详情,同时查询到用户管理的所有订单 1.2 步骤 查询用户详情(不含订单) 查询指定用户的所有订单 用户管理订单 修改JavaBean 映射文件 1.3 实现 1.3.1 用户详情 编写功能接口 package com.czxy.ssm.mapper; import com.czxy.ssm.domain.User; import org.apache.ibatis.annotations.Param; public interface U

Harden_zsc的博客 1980

SSM——mybatis处理多表查询中 多对一 一对多 映射处理解决方案

SSM——mybatis处理多表查询中 多对一 映射处理的三种解决方案

G_change_的博客 1144
上一篇: SSM框架之_Mybatis入门笔记,详解快速上手(五):注解开发与Lombok篇。简化开发就看这里,内含干货
下一篇: SSM框架之_Mybatis入门笔记,详解快速上手(七):动态SQL篇,Mybatis的优势在这里
折纸之泪
博客等级 码龄7年 25粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值