❤️Mybatis开发中什么是多对一处理、一对多处理?
❤️Mybatis开发中什么是多对一处理、一对多处理?
什么是多对一:
- 对于学生而言,关联…多个学生关联一个老师(多对一)
- 对于老师而言,集合…一个老师有很多学生(一对多)
SQL:
CREATE TABLE `teacher` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(`id`, `name`) VALUES (1, '陈老师'); CREATE TABLE `student` (`id` INT(10) NOT NULL,`name` VARCHAR(30) DEFAULT NULL,`tid` INT(10) DEFAULT NULL,PRIMARY KEY (`id`),KEY `fktid` (`tid`),CONSTRAINT `fktid` FOREIGN KEY (`tid`) REFERENCES `teacher` (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('1', '小明', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('2', '小红', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('3', '小张', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('4', '小李', '1');
INSERT INTO `student` (`id`, `name`, `tid`) VALUES ('5', '小王', '1');
测试环境搭建
1.导入lombok
2.新建实体类Teacher,Student
3.建立Mapper接口
4.建立Mapper.xml文件
5.在核心配置文件中绑定注册我们的Mapper接口或者文件!
5.测试查询是否能够成功
❤️一对多处理
如:一个老师有多个学生
对于老师而言,就是一对多的关系
环境搭建
实体类
Teacher
package com.kk.pojo;import lombok.Data;import java.util.List;@Data
public class Teacher {private int id;private String name;//一个老师拥有多个学生 集合private List<Student> students;
}
Student
package com.kk.pojo;import lombok.Data;@Data
public class Student {private int id;private String name;private int tid;
}
按照结果嵌套处理
<!-- 按结果嵌套查询--><select id="getTeacher" resultMap="TeacherStudent">select s.id sid,s.name sname,t.name tname,t.id tidfrom student s,teacher twhere s.tid=t.id and t.id=#{tid}</select><resultMap id="TeacherStudent" type="Teacher"><result property="id" column="tid"/><result property="name" column="tname"/>
<!-- 复杂的属性,我们需要单独处理 对象:association 集合:collection
javaType="" 这是一个指定属性的类型
集合中的泛型信息,我们使用ofType获取(如List<> 即为集合中的泛型)--><collection property="students" ofType="Student"><result property="id" column="sid"/><result property="name" column="sname"/><result property="tid" column="tid"/></collection></resultMap>
按照查询嵌套处理
<!-- 子查询--><select id="getTeacher2" resultMap="TeacherStudent2">select * from mybatis.teacher where id=#{tid};</select>
<!-- id="TeacherStudent2" 由此关联--><resultMap id="TeacherStudent2" type="Teacher"><result property="id" column="tid"/><result property="name" column="tname"/><collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/></resultMap><select id="getStudentByTeacherId" resultType="Student">select * from mybatis.student where tid=#{tid}</select>
1.关联-association 多对一
2.集合-collection 一对多
3.javaType & ofType
- javaType用来指定实体类中属性的类型
- ofType 用来执行映射到List或者集合中的pojo类型,泛型中的约束类型!
面试高频
- Mysql引擎
- InnoDB底层原理
- 索引
集合-collection 一对多
3.javaType & ofType
- javaType用来指定实体类中属性的类型
- ofType 用来执行映射到List或者集合中的pojo类型,泛型中的约束类型!
面试高频
- Mysql引擎
- InnoDB底层原理
- 索引
- 索引优化
❤️Mybatis开发中什么是多对一处理、一对多处理?相关推荐
- Mybatis中使用Dao实现类实现增删改查【实际开发中使用代理dao】
在Mybatis开发中,使用到的是代理Dao的方式实现增删改查,这样就不需要在写Dao的实现类 但是Mybatis也支持写Dao实现类!即DaoImpl 直接上DaoImpl,之前的代码可以参考前面几 ...
- 提升开发效率的一款mybatis开发神器
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 本篇同步更新地址; https://me.csdn.net/Dan ...
- 后台SpringBoot + Mybatis开发遇到的一些坑
目录 一.首先介绍一下开发框架,SpringBoot+Mybatis,SpringBoot集成了Tomcat因此,不需要下载Tomcat服务运行,开发完直接build出jar包运行即可,Mybatis ...
- 提升开发效率的一款 mybatis 开发神器
点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 原创 | Java 2020 超神之路,很肝~ 中文详细注释的开源项目 ...
- 【MyBatis框架】高级映射-多对多查询
多对多查询 1.需求 查询用户及用户购买商品信息. 2.sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetai ...
- 在Mybatis3开发中与配置相关的7点体会
Mybatis3前身是Apche开源项目ibatis,后前移至google code改名为Mybatis,mybatis是Java持久化框架,关于Mybatis学习难度不大,熟悉JDBC编程的话,相信 ...
- javaweb开发中的那些坑
最近电脑有点问题,没办法就重装系统了,花了一个晚上重装IDE.,配置环境,好不容易把eclipse的环境弄好,加载之前的项目时却又到各种问题,一怒之下,写一篇记录下在javaweb开发中遇到的各种坑 ...
- 个人在 laravel 开发中使用到的一些技巧(持续更新)
1.更高效率地查询:使用批量查询代替 foreach 查询(多次 io 操作转换为一次 io操作) 如果想要查看更详尽的介绍,可以看看这篇文章 什么是 N+1 问题,以及如何解决 Laravel 的 ...
- 使Mybatis开发变得更加轻松的增强工具 — Ourbatis
一.Mybatis的不足之处 Mybatis是一款优秀的及其灵活的持久层框架,通过XML配置并映射到Mapper接口为Service层提供基础数据操作入口. 这么优秀的框架竟然还有不足之处? 俗话说人 ...
最新文章
- 计算机显卡敀主要性能参数,显卡性能看什么参数(新手必备的显卡性能知识全解)...
- app网站换服务器,app切换服务器
- Python模拟ICMP包
- 基于Docker搭建私有镜像仓库
- 一个立即关闭显示器的小软件(Masm开发,只有3KB大小)
- Linux钩子拦截删除文件,在Linux中保存钩子文件
- drawable canvas使用
- HTTP状态:202、301、304、404、503
- mini2440驱动分析之ADC
- 二项式法在负荷计算机的应用,7.5二项式法确定计算负荷
- 学习: 导航器添加修饰符
- logistic回归详解(四):梯度下降训练逻辑回归python实现
- 人人都是 DBA(IX)服务器信息收集脚本汇编 (转)
- python抛出异常的关键字_浅谈python抛出异常、自定义异常, 传递异常
- 2013.6月安徽二级c语言考试试题答案豆丁网,安徽省c语言二级考试
- 目标检测应用竞赛 | 天池铝型材表面瑕疵(含数据集、详细解决方案)
- (可能是)最后一次参加同学婚礼了
- MQTT系列 | Retained消息和LWT和Keep Alive
- Designing Network Design Spaces,译读
- 中国医科大学22春《病理学(本科)》在线作业【标准答案】