创建三个表

CREATE TABLE `t_teacher` (
`t_id` int(11) NOT NULL AUTO_INCREMENT,
`t_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `t_teacher` VALUES ('1', '刘晓云');
INSERT INTO `t_teacher` VALUES ('2', '郑同华');
INSERT INTO `t_teacher` VALUES ('3', '李明军');

CREATE TABLE `t_class` (
  `c_id` int(11) NOT NULL AUTO_INCREMENT,
  `c_name` varchar(20) DEFAULT NULL,
  `teacher_id` int(11) DEFAULT NULL,
PRIMARY KEY (`c_id`),
KEY `fk_teacher_id` (`teacher_id`),
CONSTRAINT `fk_teacher_id` FOREIGN KEY (`teacher_id`) REFERENCES `t_teacher` (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

INSERT INTO `t_class` VALUES ('1', '2020软件1班', '3');
INSERT INTO `t_class` VALUES ('2', '2020软件2班', '2');
INSERT INTO `t_class` VALUES ('3', '2020软件3班', '1');

CREATE TABLE `t_student` (
  `s_id` int(11) NOT NULL AUTO_INCREMENT,
  `s_name` varchar(30) DEFAULT NULL,
  `s_gender` varchar(10) DEFAULT NULL,
  `s_age` int(11) DEFAULT NULL,
  `class_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`s_id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

insert into `t_student` VALUES ('1','童大为','男','20','1');
insert into `t_student` VALUES ('2','童为','男','22','1');
insert into `t_student` VALUES ('3','童小为为','男','20','1');
insert into `t_student` VALUES ('4','李总','男','28','1');
insert into `t_student` VALUES ('5','李四','男','24','1');
insert into `t_student` VALUES ('6','张三','男','20','1');
insert into `t_student` VALUES ('7','王五','男','21','1');
insert into `t_student` VALUES ('8','张起灵','男','20','1');
insert into `t_student` VALUES ('9','张日山','男','200','1');

创建更刚才创建好的表相对应的实体类文件,在里面创建get\set\tostring,方法

附上代码:

package net.lbd.mybatis.bean;public class Teacher {private int id;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Teacher{" +"id=" + id +", name='" + name + '\'' +'}';}
}
package net.lbd.mybatis.bean;public class Student {private  int id;private String name;private String gender;private  int age;private  int clazz;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getClazz() {return clazz;}public void setClazz(int clazz) {this.clazz = clazz;}@Overridepublic String toString() {return "Student{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", age=" + age +", clazz=" + clazz +'}';}
}
package net.lbd.mybatis.bean;import java.util.List;public class Clazz {private int id;private  String name;private Teacher teacher;private List<Student>students;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}public List<Student> getStudents() {return students;}public void setStudents(List<Student> students) {this.students = students;}@Overridepublic String toString() {return "Clazz{" +"id=" + id +", name='" + name + '\'' +", teacher=" + teacher.getName() +", students=" + students +'}';}
}

班级映射器配置文件

附上代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="net.lbd.mybatis.mapper.ClazzMapper"><!--三表关联查询--><select id="findById" parameterType="int" resultMap="ClazzResultMap">select * from t_teacherinner join t_class on t_class.teacher_id = t_teacher.t_idinner join t_student on t_class.c_id = t_student.class_idwhere c_id =#[id];</select><!--定义班级的结果映射--><resultMap id="clazzResultMap" type="Clazz"><result column="c_id" property="id"/><result column="c_name" property="name"/><!--建立一对一的关联--><association property="teacher" column="teacher_id" javaType="Teacher"><result property="id" column="t_id"/><result property="name" column="t_name"/></association><!--建立一对多的关联--><collection property="students" ofType="Student"><result property="id" column="s_id"/><result property="name" column="s_name"/><result property="gender" column="s_gender"/><result property="age" column="s_age"/><association property="clazz" column="class_id" javaType="Clazz"><result property="name" column="c_name"/></association></collection></resultMap><select id="findAll" resultMap="clazzResultMap2">select * from t_class;</select><!--定义班级的结果映射--><resultMap id="clazzResultMap2" type="Clazz"><result column="c_id" property="id"/><result column="c_name" property="name"/><association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher"/></resultMap><select id="getTeacher" resultType="Teacher">select t_id id,t_name name from t_teacher where t_id=#{id};</select></mapper>

关系图,这个图可以帮助理解映射文件

在mybatis-config.xml配置文件中,添加图中圈出的代码

遇到的问题

mybitis第三讲:关联查询相关推荐

  1. MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)

    MyBitis(iBitis)系列随笔之一:MyBitis入门实例 MyBitis(iBitis)系列随笔之二:类型别名(typeAliases)与表-对象映射(ORM) MyBitis(iBitis ...

  2. MyBatis关联查询、多条件查询

    MyBatis关联查询.多条件查询 1.一对一查询 任务需求; 根据班级的信息查询出教师的相关信息 1.数据库表的设计 班级表: 教师表: 2.实体类的设计 班级表: public class Cla ...

  3. NHibernate之旅(11):探索多对多关系及其关联查询

    本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...

  4. 关于Entity Framework自动关联查询与自动关联更新导航属性对应的实体注意事项说明...

    一.首先了解下Entity Framework 自动关联查询: Entity Framework 自动关联查询,有三种方法:Lazy Loading(延迟加载),Eager Loading(预先加载) ...

  5. elasticsearch多表关联查询_Mybatis【15】 Mybatis如何实现一对一的情况多表关联查询?...

    注:代码已托管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,项目是mybatis-11-one2one,需要自取,需要配置maven ...

  6. MySQL IN、Exist关联查询时,我们为什么建议小表驱动大表?

    有的时候我们在操作数据库时会将两个或多个数据表关联起来通过一些条件筛选数据,在关联表时我们要遵循一些原则,这样会使我们编写的SQL 语句在效率上快很多. 一.优化原则 小表驱动大表,即小的数据集驱动大 ...

  7. mysql面试关联查询语句_MySQL百万级、千万级数据多表关联SQL语句调优

    作者:成金之路 www.cnblogs.com/uttu/p/6384541.html 本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万 ...

  8. mybatis02映射动态sql关联查询spring整合mybatis

    2019独角兽企业重金招聘Python工程师标准>>> 输入映射和输出映射: 动态sql: 关联查询_一对一: 关联查询_一对多: 一对一,一对多操作的区别: 一对一,resultM ...

  9. Hibernate实现对多个表进行关联查询

    Hibernate实现对多个表进行关联查询? String sTest = "from tBookInfo book, BookSelection sel where book.id = s ...

最新文章

  1. 【ASP.NET Core】ASP.NET Core 依赖注入
  2. 基于springboot实现疫情数据统计系统
  3. 披星“戴”云,百治百效
  4. nginx 报错 99: Cannot assign requested address
  5. 为什么我们会拖延? (TED)
  6. ASP.NET Core 日志框架:Serilog
  7. 关于Oracle实时数据库的优化思路
  8. MySQL中information_schema
  9. 热血上头!程序员想拍桌子离职的1000个瞬间...
  10. mysql主从备份及原理分析
  11. linux(windows,mac)下安装ta-lib
  12. CentOS6.x定制~修改CentOS字样
  13. activiti 源码笔记之startProcess
  14. ectouch微信登录提示此次操作失败请返回重试原因
  15. 通俗易懂的方式讲解最大流和最小割问题
  16. 多平台聚合关键字搜索
  17. 算法入门:日期计算(附蓝桥杯)
  18. 安利 : プログラミングで彼女をつくる 全攻略~
  19. windows无法启动Apache服务,错误1067:进程意外终止
  20. 设置网页只允许在手机微信浏览器打开

热门文章

  1. 内核打上yaffs2补丁遇到的问题
  2. wap站点优于传统站点的异同分析
  3. html怎样设置字体不能被选中,css设置:图片文字等不能被选择
  4. 【数理知识】差分 差分方程
  5. matlab---spectrogram短时傅里叶变换与chrip信号
  6. nginx之静态资源访问和负载均衡的使用!
  7. 【工具】TFT彩屏图片点阵取模工具,Img2Lcd图片取模软件,图片生成c语言头文件...
  8. C语言常用宏定义(#define)使用方法
  9. 计算机组成与原理如何书写DEC微指令,计算机组成原理课程设计16位机微程序控制器指令系统设计与实现.doc...
  10. 怎么查linux的虚拟内核,Linux 内核 虚拟地址 物理地址 转换