多对一处理(多个学生对应一个老师)

一、环境搭建(mybatisnew01)

1.导入Lombok

2.在mybatis数据库建立Teacher,Student表格

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, '秦老师'); 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=utf8;
INSERT 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');

3.新建实体类Teacher,Student

@Data
public class Teacher {private int id;private String name;
}
@Data
public class Student {private int id;private String name;//学生需要关联一个老师private Teacher teacher;
}

4.建立Mapper接口

5.建立对应的Mapper.xml文件

6.在mybatis-config中绑定Mapper接口或文件

7.测试运行

二、查询

1.按照查询嵌套处理

1.在studentMapper中写入方法

    //查询所有的学生信息,以及对应的老师的信息List<Student> getStudent();

2.在studentMapper.xml中实现

    <!--1.查询所有的学生信息  2.根据查询出学生的tid查找老师 --><select id="getStudent" resultMap="StudentTeacher">select * from student</select><resultMap id="StudentTeacher" type="Student"><result property="id" column="id"/><result property="name" column="name"/><!--复杂的属性需要单独处理  对象:association   集合:collection--><association property="teacher" column="tid" javaType="Teacher" select="getTeacher"/></resultMap><select id="getTeacher" resultType="Teacher">select * from teacher where id = #{id}</select>

3.测试

   @Testpublic void selectStudent(){SqlSession sqlsession = new mybatisUtils().getSqlsession();StudentMapper mapper = sqlsession.getMapper(StudentMapper.class);List<Student> studentList = mapper.getStudent();for (Student student:studentList) {System.out.println(student);}}

2、按照结果嵌套处理

    <!-- 按照结果嵌套查询--><select id="getStudent2" resultMap="StudentTeacher2">select s.id sid,s.name sname,t.id tid,t.name tnamefrom student s,teacher twhere s.tid = t.id</select><resultMap id="StudentTeacher2" type="Student"><result property="id" column="sid"/><result property="name" column="sname"/><!--复杂的属性需要单独处理  对象:association   集合:collection--><association property="teacher" javaType="Teacher"><result property="name" column="tname"/><result property="id" column="tid"/></association></resultMap>

一对多处理(一个老师对应多个学生)

1.新建module:mybatisnew02

2.对实体类进行修改

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

3.查询

3.1按照结果嵌套处理

    <!--按结果嵌套查询 --><select id="getTeacher" resultMap="TeacherStudent">select s.id sid,s.name sname,t.id tid,t.name tnamefrom 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获取 --><collection property="students" ofType="Student"><result property="id" column="sid"/><result property="name" column="sname"/><result property="tid" column="tid"/></collection></resultMap>

3.2按照查询嵌套处理

    <!-- 按照查询嵌套处理--><select id="getTeacher2" resultMap="TeacherStudent2">select * from teacher where id = #{tid};</select><resultMap id="TeacherStudent2" type="Teacher"><!-- select="getStudentByTeacherId" column="id"是与下面的select绑定--><collection property="students" javaType="ArrayList" ofType="Student" select="getStudentByTeacherId" column="id"/></resultMap><select id="getStudentByTeacherId" resultType="Student">select * from student where tid = #{tid}</select>

注意:

association   多对一                collection 一对多

Mybatis学习笔记5——多对一处理、一对多处理相关推荐

  1. mybatis学习笔记(12)-多对多查询

    mybatis学习笔记12-多对多查询 示例 多对多查询总结 resultMap总结 本文实现多对多查询,查询用户及用户购买商品信息. 示例 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通 ...

  2. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  3. MyBatis多参数传递之Map方式示例——MyBatis学习笔记之十三

    前面的文章介绍了MyBatis多参数传递的注解.参数默认命名等方式,今天介绍Map的方式.仍然以前面的分页查询教师信息的方法findTeacherByPage为例(示例源代码下载地址:http://d ...

  4. MyBatis多参数传递之混合方式——MyBatis学习笔记之十五

    在本系列文章的<MyBatis多参数传递之Map方式示例>一文中,网友mashiguang提问如下的方法如何传递参数:public List findStudents(Map condit ...

  5. 超详细Mybatis学习笔记(可供下载)

    文章目录 1.简介 2.第一个Mybatis程序 搭建环境 编写代码 测试 3.CRUD(增删改查) 3.1.几个属性 3.2.select 3.3.insert 3.4.delete 3.5.upd ...

  6. [MyBatis学习笔记] 二、Mybatis基本操作及相关标签介绍

    [MyBatis学习笔记] 二.Mybatis基本操作及相关标签介绍 一.Mybatis简介 二.简单的CRUD操作 1.构建SqlSessionFactory (1)编辑mybatis-config ...

  7. MyBatis学习笔记(1)—使用篇

    MyBatis学习笔记(1)-使用篇 MyBatis学习笔记(2)-映射关系篇 MyBatis学习笔记(3)-高级映射之一对一映射 Mybatis学习笔记(4)-高级映射之一对多映射 Mybatis学 ...

  8. mybatis学习笔记(13)-延迟加载

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(13)-延迟加载 标签: mybatis [TOC] resultMap可以实现高级映射(使用asso ...

  9. mybatis学习笔记(3)-入门程序一

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(3)-入门程序一 标签: mybatis [TOC] 工程结构 在IDEA中新建了一个普通的java项 ...

最新文章

  1. 神经网络知识专题总结!
  2. 内核级HOOK的几种实现与应用
  3. 启动/删除Docker容器时出现问题 - 如何修复
  4. js aop 拦载实现
  5. [转] android获取手机信息大全
  6. xml--Schema约束
  7. ADO.NET远程访问Access数据库的连接字符串
  8. oppoJava面试!mysql客户端安装包
  9. Win7电脑中毒解决过程复盘
  10. ping和telnet
  11. 致远SPM之金蝶K3集成解决方案
  12. python股票回测
  13. div3 C. Dominant Piranha
  14. eBay、亚马逊、Lazada、Shopee、速卖通、美客多等跨境电商平台,测评自养号需要满足什么条件?listing如何优化?
  15. 自动监控Oracle 表空间信息并发送邮件脚本
  16. Vim常用操作,normal模式、insert模式和visual模式
  17. python多线程下载小姐姐图片
  18. Java 实现图片裁剪(附代码) | Java工具类
  19. AtmelStudio 7 ASF库学习笔记一:新建工程、配置时钟、下载程序和查看官方例程
  20. v-bind的高级用法

热门文章

  1. 微信小程序+Servlet后台开发(一)
  2. 风控策略和模型的区别_风控策略
  3. 【金融量化分析】#Financial Computation(利率、债券、期权相关数理知识与代码实现)
  4. 用Delphi制作BPL包
  5. 孙子兵法(Unicode有的所有字都已录入,还有它字疑为误传)
  6. Windows远程桌面连接不上提示出现了内部错误的解决办法
  7. 公众号点击图片变成另一张_公众号互动内容:小众潮流or下一个风口?
  8. android 选择答题功能,Android实现选择题答题(包括单选、多选和答题卡)
  9. self-attention为什么要除以根号d_k
  10. 鼠标右键,以管理员身份在当前目录打开命令行窗口