MyBatis(04) -- 一对多和多对一处理

mybatis注解的详解和开发(增、删、改、查以及一对一、一对多/多对一、多对多的关系联查) Results代替了标签< resultMap> 该注解中可以使用单个@Result注解,也可以使用@Result集合格式:@Results ({@Result () , @Result ()}) 或者@Result (@Result())id 是否是主键字段column 数据库中列的名property 需要装配的属性名one 需要使用 @One 注解 (@Result (one = @One) ()) 阅读详情

多对一的处理

多对一的理解:

  • 多个学生对应一个老师

  • 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师!

 实体类编写

@Data //GET,SET,ToString,有参,无参构造
public class Teacher {
   private int id;
   private String name;
}
@Data
public class Student {
   private int id;
   private String name;
   //多个学生可以是同一个老师,即多对一
   private Teacher teacher;
}

 按查询嵌套处理

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

按结果嵌套处理

<!--
按查询结果嵌套处理
思路:
   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>

小结

        按照查询进行嵌套处理就像SQL中的子查询

        按照结果进行嵌套处理就像SQL中的联表查询

一对多的处理

一对多的理解:

  • 一个老师拥有多个学生

  • 如果对于老师这边,就是一个一对多的现象,即从一个老师下面拥有一群学生(集合)!

 实体类编写

@Data
public class Student {
   private int id;
   private String name;
   private int tid;
}
@Data
public class Teacher {
   private int id;
   private String name;
   //一个老师多个学生
   private List<Student> students;
}

按结果嵌套处理 

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

按查询嵌套处理

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

 小结

1、关联-association

2、集合-collection

3、所以association是用于一对一和多对一,而collection是用于一对多的关系

4、JavaType和ofType都是用来指定对象类型的

  • JavaType是用来指定pojo中属性的类型

  • ofType指定的是映射到list集合属性中pojo的类型。

注意说明:

1、保证SQL的可读性,尽量通俗易懂

2、根据实际要求,尽量编写性能更高的SQL语句

3、注意属性名和字段不一致的问题

4、注意一对多和多对一 中:字段和属性对应的问题

5、尽量使用Log4j,通过日志来查看自己的错误

C++新手也能搞定!Windows下Cesium-Native编译全流程(附依赖下载技巧) 本文为C++新手详细介绍了在Windows系统下编译Cesium-Native库的全流程。重点针对网络环境不佳的情况,提供了手动下载依赖库的实用技巧,并指导用户使用CMake配置、生成解决方案,最终完成编译与测试验证,帮助开发者成功构建这一处理3D地理空间数据的C++运行时库。 阅读详情

相关推荐

Open3D 教程学习指南 (持续整理)

Open3D 是一个开源库,旨在为 3D 数据处理提供高效且易用的工具。它由 Intel 开发和维护,支持多种 3D 数据处理任务,如点云处理、3D 重建、几何处理和可视化等。

Chase Blog 5929

MyBatis:一对多和多对一处理

笔记来源于狂神说Java 多对一的处理 多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 搭建测试环境 1、IDEA安装Lombok插件 2、引入Maven依赖 <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --> <dependency&g...

weixin_46011971的博客 233

中兴SDH设备开局及业务配置

中兴SDH设备开局及业务配置 1.设备开局(S200-----S325) A.开电之后,按住截铃(bell off)开关,直至NCP告警灯变成橙色; B.此时,设备进入Download状态,设备IP为:192.192.192.11/24; 2.用交叉线(568A)将设备的QX口连接至电脑,电脑配置和设备相同网段的IP信息; 3.在电脑上测试连通性:pin...

weixin_33897722的博客 3996

idea__MyBatis框架11——多表查询(一对一、一对多)

多表查询(一对一、一对多):一、准备环境二、一对一三、一对多 一、准备环境 mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单就是一对多 订单和用户就是多对一 一个用户可以下多个订单 多个订单属于同一个用户 人和身份证号就是一对一 一个人只能有一个身份证号 一个身份证号只能属于一个人 老师和学生之间就是多对多 一个学生可以被多个老师教过 一个老师可以交多个学生 特例: 如果拿出每一个订单,他都只能属于一个用户。 所以Mybatis就

weixin_42858422的博客 3433

ArcMap新手必看:5分钟搞定面要素的四至信息提取(附字段重命名技巧)

本文为ArcMap新手提供了快速提取面要素四至信息的详细教程,包括数据准备、坐标系选择、批量处理技巧及字段重命名优化方案。通过实战步骤和Python脚本示例,帮助用户高效完成GIS数据处理任务,特别适合行政区划数据分析和报告生成。

weixin_29266007的博客 384

科研绘图神器Origin2024最新中文版安装教程:5分钟搞定所有配置

本文提供了一份详细的Origin2024中文版安装与配置指南。从系统环境核查、安装包获取验证,到分步安装、语言切换及关键初始设置,手把手教你5分钟完成所有基础配置。同时,指南还分享了首次启动后的个性化设置与高效绘图工作流,助你快速上手这款科研绘图神器,提升数据处理与图表制作效率。

weixin_29247219的博客 1039

【Mybatis】mybatis详解(多对多)

5、MyBatis 入门实例 多对多 基于xml配置   这里我们以 users 表和 groups 表为例,一个 users 可能加入多个 groups,而一个 groups 可能包含多个 users,故构成 多对多 的关联   ①、在数据库中建立相应的表   users 表   groups 表   两者之间的关联表users_groups表   ②、建立对应的实体类   Users.java package many.to.many; import java...

Luck_And_Destiny的博客 5401

Transformer实战——Transformer自编码模型

自编码模型依赖于原始 Transformer 编码器,并且在解决分类问题时非常高效。除了 BERT 外,还有许多流行的自编码模型,在本节中,我们将一些除 BERT 外的自编码模型,这些模型的目标是通过优化预训练过程、增加层数或头数、改善数据质量、设计更好的目标函数等,来在下游任务上取得更好的表现。这些改进大致可以分为两个方面,更好的架构设计选择和预训练控制。

盼小辉丶的博客 9305

Mybatis的多表操作的多对多

Mybatis的多表操作的多对多 1 分析mybatis多对多的步骤并搭建环境 分析如下: 示例:用户和角色 一个用户可以有多个角色 一个角色可以赋予多个用户 步骤: 1、建立两张表:用户表,角色表。 让用户表和角色表具有多对多的关系。需要使用中间表,中间表中包含各自的主键,在中间表中是外键。 2、建立两个实体类:用户实体类和角色实体类。 让用户和角色的实体类能体现出来多对多的关系。 各自包含对方一个集合引用。 3、建立两个配置文件。 用户的配置文件。 角色的配置文件。 4、实现配置: 当我们查询用户时,可

weixin_40055163的博客 1909

构建个体结构脑网络的另一种方法

这篇文献提出了一种构建个体结构脑网络的方法即Morphometric INverse Divergence (MIND),通过T1像数据即可对每个被试构建一个脑网络,且通过多个特征进行构建而非单一的特征。即可获得由4个特征得到的个体结构网络矩阵,可以根据自己的需求采用不同的特征组合得到网络矩阵,也可以结合T1/T2像得到髓鞘化相关的网络矩阵,后续可修改代码批量处理自己的数据。这是文献贴出来的代码。在终端直接克隆到本地。2.修改路径运行代码。

weixin_52073820的博客 822

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

我写了一个自动识别火车车厢位置的算法【lidar点云识别】

qq_43212290的博客 797

Mybatis从入门到精通系列 10 —— Mybatis多表查询之多对多查询

  本文针对 Mybatis 多表查询的多对多查询进行详细讲解。   本文案例主要以用户和角色的模型来分析 Mybatis 多表关系。用户为 User 表,角色表为 Role 表,中间表为 User_role。一个用户可以拥有多个角色,一个角色可以赋予多个用户,role_desc 代表角色描述。具体关系如下: 文章目录一、多表查询(多对多)分析步骤二、多对多查询2.1 编写角色实体类2.2 编写 SQL 语句2.3 定义持久层角色的 Dao 接口2.4 IRoleDao.xml 文件中的查询配置信息2.

秀岩的博客 3232

【26美赛F题 To Gen-AI, or Not To Gen-AI】(MCM/ICM)思路解析及代码分享

摘要:本文研究生成式人工智能(Gen-AI)对三类职业(STEM、技能型工艺、艺术)的影响,建立量化模型预测未来10-20年岗位需求变化。通过分析AI替代效应($R_{sub}(t)$)和增强效应($R_{enh}(t)$),提出差异化高校课程调整策略:STEM专业需加强AI集成能力,技能型工艺专业应结合智能工具与实操训练,艺术专业需平衡AI创作辅助与原创性培养。模型表明,高校通过针对性课程优化可提升毕业生在AI时代的就业竞争力,为教育决策提供数据支持。(149字)

一键难忘的博客 636

mybatis复习04高级查询 一对多,多对一的映射处理,collection和association标签的使用

mybatis中一对多,多对一的映射处理,collection和association标签的使用,分布查询级联查询。association:处理多对一的映射关系。association标签的结构:, property:需要处理多对一的映射关系的属性名, javaType:该属性的类型.collection:用来处理一对多的映射系,property:需要处理一对多的映射关系的属性名,ofType:表示该属性对应的集合中存储的数据的类型.

m0_63622279的博客 1919

ssm框架搭建

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

04 Mybatis 使用注解开发,以及处理一对多和多对一的联合表的方式

Mybatis 使用注解开发,以及处理一对多和多对一的联合表的方式8、使用注解开发8.1、面向接口编程8.2、使用接口开发10、多对一处理1、按照查询嵌套语句2、按照结果嵌套查询11、一对多处理1、按照结果嵌套查询2、按照查询嵌套小节 8、使用注解开发 8.1、面向接口编程 8.2、使用接口开发 1、 注解在接口上实现 @Select("select * from user") List<User> getUsers(); @Select("select *from user where

从头再来的博客 271

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MyBatis代码实例系列-04:MyBatis多表映射实例(一对多、多对一和多对多)

超级通道:MyBatis代码实例系列-绪论 本章主要记录MyBatis中的多表映射:一对多、多对一和多对多,涉及到的知识点有: 1. resultMap:当数据库方法返回的是复合数据类型(如list等),通常使用resultMap而非resultType。 2. collection:在resultMap中用来配置集合类型的数据结构,用来实现表间一对多映射。 3. association:

韩超的博客 (hanchao5272) 6433

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Mybatis实现多对一与一对多的处理

Mybatis实现多对一与一对多的处理 多对一:多个对象对应一个对象 比如:一个班级有很多学生,可是这个班级只有一个语文老师。这里学生和老师的关系就是多对一。 一对多:一个对象同时对应多个对象 比如:一个语文老师有很多班级,每一个班级就有很多的学生。这里老师和学生的关系就是一对多。 Mybatis实现多对一,需要用到resultMap中的association(关联)属性 创建两张表,实现多对一 CREATE TABLE `teacher` ( `id` INT(10) NOT NULL,

Starry Sea 546

Mybatis学习日记-day6-多对一和一对多

在之前的博客里,学习的数据库模型都是单一的,还是那句话,如果世界总是那么美好就好了!在数据库设计和关系型数据建模中,多对一(Many-to-One)和一对多(One-to-Many)是两种非常基础且常见的实体间关系,它们是数据库设计中非常基础且强大的概念,它们帮助我们在逻辑上组织和表示现实世界中的复杂关系。

2301_79789506的博客 1292

MyBatis05:一对多和多对一处理

回顾上一章:MyBatis04:使用注解开发 多对一的处理 多对一的理解: 多个学生对应一个老师 如果对于学生这边,就是一个多对一的现象,即从学生这边关联一个老师! 数据库设计 CREATETABLE`teacher` ( `id`INT(10)NOTNULL, `name`VARCHAR(30) DEFAULTNULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT...

codeRunner-hd的博客 265

Mybatis学习04 多对一与一对多处理

数据库表结构 Students表 Class_table表 多对一处理的2种方法 按结果嵌套处理 实体类 Students.java public class Students { private String s_id; private String s_name; private String s_sex; ...

u012777599的博客 289

Mybatis的多表操作的一对多

Mybatis的多表操作的一对多 1 mybatis表之间关系分析 mybatis中的多表查询 表之间的关系有几种: 一对多 多对一 一对一 多对多 举例: 用户和订单就是一对多。 订单和用户就是多对一。 一个用户可以下多个订单。 多个订单属于同一个用户。 人和身份证号就是一对一 一个人只能有一个身份证号。 一个身份证号只能属于一个人。 老师和学生之间就是多对多 一个学生可以被多个老师教过。 一个老师可以交多个学生。 特例: 如果拿出每一个订单,他都只能属于一个用户。 所以Mybatis就把多对一看成了一对

weixin_40055163的博客 418

mybatis中的多对一和一对多关系

mybatis中的多对一和一对多关系 以用户(User)和用户的订单(Order)为例: 在用户和订单关系中,一个用户可以有多个订单,同时多个订单也可以对应同一个用户 以下是两个bean类的属性 User: private int id; private String username; private Date birthday; private String sex; private String address; private List<Order&g

weixin_43904583的博客 399

Mybatis 多表查询示例(一对一查询(多对一))

Mybatis中的多表查询 表之间的关系有几种 一对多 多对一 一对一 多对多 举例 用户和订单之间就是一对多 订单和用户之间就是多对一 一个用户可以下多个订单 多个订单属于同一个用户 人和身份证号就是一对一 一个人只能有一个身份证号 一个身份证号只能属于一个人 老师和学生之间就是多对多 一个学生可以被多个老师教 一个老师可以教多个学生 特例: 如果拿出每一个订单,他都只能属于一个用户 所以Mybatis就把多对

qq_37649504的博客 212

MyBatis教程二(表关联(一对多+多对一))

Mybatis表关联一对多 在Java实体对象对中,一对多可以根据List和Set来实现,两者在mybitis中都是通过collection标签来配合来加以实现。 应用场景:首先根据用户 ID 读取一个用户信息,然后再读取这个用户所发布贴子(post)。 1、先做一些准备工作 创建一个 java 工程,工程名称为:mybatis04-one2many,还需要创建两张表,它们分别是用户表 user,...

J.K.Yang的博客 258

mybatis一对多用collection多对一用assocation

MyBatis中在查询进行select映射的时候,返回类型可以用resultType,也可以用resultMap,resultType是直接表示返回类型的,而resultMap则是对外部ResultMap的引用,但是resultType跟resultMap不能同时存在。在MyBatis进行查询映射的时候,其实查询出来的每一个属性都是放在一个对应的Map里面的,其中键是属性名,值则是其对应的值。当提

r834310840的专栏 4632

【MyBatis】Mybatis 多表查询

文章目录Mybatis 多表查询一、表之间的关系二、准备工作2.1 创建account表2.2 创建Account、User实体类2.3 Dao层、映射文件配置2.4 主配置文件SqlMapConfig.xml2.5 测试类配置三、一对一查询3.1 编写sql语句方式一:查询信息实体类3.2.1 创建 AccountUser 类3.2.2 IAccountDao3.2.3 IAccountDao.xml 文件中的查询配置信息3.2.4 AccountTest 测试类方式二:添加主从关系对象属性3.3.1..

懂得一千零一种,赋予你失败的方法! 702
上一篇: 面向接口编程
下一篇: MyBatis(05) -- 动态SQL
VirtualShell
博客等级 码龄5年 0粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值