1.实体类

  1. public class Student {
  2. private int id;
  3. private String name;
  4. }
  5. public class Classes {
  6. private int id;
  7. private String name;
  8. private Teacher teacher;
  9. private List<Student> students;
  10. }

2.映射文件

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.zhengbin.entity.classMapper">
  4. <!-- 方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集
  5. SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND c.c_id=1
  6. -->
  7. <select id="getClass3" parameterType="int" resultMap="ClassResultMap3">
  8. select * from class c, teacher t, student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id}
  9. </select>
  10. <resultMap type="Classes" id="ClassResultMap3">
  11. <id property="id" column="c_id" />
  12. <result property="name" column="c_name" />
  13. <association property="teacher" javaType="Teacher">
  14. <id property="id" column="t_id"/>
  15. <result property="name" column="t_name"/>
  16. </association>
  17. <!-- ofType 指定 students 集合中的对象类型 -->
  18. <collection property="list" ofType="Student">
  19. <id property="id" column="s_id" />
  20. <result property="name" column="s_name" />
  21. </collection>
  22. </resultMap>
  23.  
  24. <!-- 方式二:嵌套查询:通过执行另外一个 SQL 映射语句来返回预期的复杂类型
  25. SELECT * FROM class WHERE c_id=1;
  26. SELECT * FROM teacher WHERE t_id=1
  27. //1 是上一个查询得到的 teacher_id 的值 SELECT*FROMstudentWHEREclass_id=1
  28. //1是第一个查询得到的c_id字段的值
  29. -->
  30. <select id="getClass4" parameterType="int" resultMap="ClassResultMap4">
  31. select * from class where c_id=#{id}
  32. </select>
  33. <resultMap type="Classes" id="ClassResultMap4">
  34. <id property="id" column="c_id" />
  35. <result property="name" column="c_name" />
  36. <association property="teacher" column="teacher_id" javaType="Teacher" select="getTeacher2"></association>
  37. <collection property="list" ofType="Student" column="c_id" select="getStudent"></collection>
  38. </resultMap>
  39. <select id="getTeacher2" parameterType="int" resultType="Teacher">
  40. SELECT t_id id, t_name name FROM teacher WHERE t_id=#{id}
  41. </select>
  42. <select id="getStudent" parameterType="int" resultType="Student">
  43. SELECT s_id id, s_name name FROM student WHERE class_id=#{id}
  44. </select>
  45. </mapper>

classMapper.xml

3.测试类

  1. package com.zhengbin.test;
  2.  
  3. import java.util.List;
  4.  
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7.  
  8. import com.zhengbin.entity.Classes;
  9. import com.zhengbin.entity.Student;
  10. import com.zhengbin.util.MyBatisUtils;
  11.  
  12. public class Test5 {
  13. @org.junit.Test
  14. public void getClasses(){
  15. SqlSessionFactory sessionFactory = MyBatisUtils.getFactory();
  16. // 参数为TRUE,相当于session.commit();
  17. SqlSession session = sessionFactory.openSession(true);
  18. // 读取映射文件
  19. String statement = "com.zhengbin.entity.classMapper" + ".getClass3";
  20. /*
  21. * 查看本班所有学生的信息,与任课老师的信息
  22. * 一个班级对多个学生,一个班级对一个老师
  23. * 即 一对多 与 一对一
  24. */
  25. Classes c = session.selectOne(statement,1);
  26. List<Student>list = c.getList();
  27. System.out.println(list);
  28. System.out.println(c);
  29. session.close();
  30. }
  31.  
  32. @org.junit.Test
  33. public void getClasses1(){
  34. SqlSessionFactory sessionFactory = MyBatisUtils.getFactory();
  35. // 参数为TRUE,相当于session.commit();
  36. SqlSession session = sessionFactory.openSession(true);
  37. // 读取映射文件
  38. String statement = "com.zhengbin.entity.classMapper" + ".getClass4";
  39. Classes c = session.selectOne(statement,1);
  40. List<Student> list = c.getList();
  41. System.out.println(list);
  42. System.out.println(c);
  43. session.close();
  44. }
  45. }

Test.java

Mybatis学习——一对多关联表查询的更多相关文章

  1. MyBatis学习总结——实现关联表查询(转)

    原文链接:孤傲苍狼 一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关 ...

  2. MyBatis学习总结(五)——关联表查询的实现

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  3. Mybatis源码分析--关联表查询及延迟加载原理(二)

    在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...

  4. MyBatis入门学习教程-实现关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  5. Mybatis源码分析--关联表查询及延迟加载(一)

    Mybatis提供了关联查询映射的功能. 一.一对一关联

  6. mybatis深入理解(八)-----关联表查询

    一.一对一关联 1.1.提出需求 根据班级id查询班级信息(带老师的信息) 1.2.创建表和数据 创建一张教师表和班级表,这里我们假设一个老师只负责教一个班,那么老师和班级之间的关系就是一种一对一的关 ...

  7. mybatis学习 十二 多表查询

    Mybatis 实现多表查询方式: (1)业务装配.对两个表编写单表查询语句,在业务(Service)把查询的两个结果进行关联. (2)使用Auto Mapping特性,在实现两表联合查询时通过别名完 ...

  8. Mybatis学习笔记之---多表查询(1)

    Mybatis多表查询(1) (一)举例(用户和账户) 一个用户可以有多个账户 一个账户只能属于一个用户(多个账户也可以属于同一个用户) (二)步骤 1.建立两张表:用户表,账户表,让用户表和账户表之 ...

  9. Mybatis学习笔记之---多表查询(2)

    Mybatis多表查询(2) (一)举例 用户和角色 一个用户可以有多个角色,一个角色可以赋予多个用户 (二)步骤 1.建立两张表:用户表,角色表,让用户表和角色表具有多对多的关系.需要使用中间表,中 ...

随机推荐

  1. PHP之implode与explode函数讲解

    implode (PHP 4, PHP 5) implode — 将一个一维数组的值转化为字符串 说明¶ string implode ( string $glue , array $pieces ) ...

  2. Web应用中的轻量级消息队列

    Web应用中为什么会需要消息队列?主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达mysql,直接导致无数的行锁表锁,甚 ...

  3. uva 514

    栈的简单应用 /************************************************************************* > Author: xlc28 ...

  4. EXCEL,熟悉又不熟悉的项目管理工具

    EXCEL,熟悉又不熟悉的项目管理工具 如何利用excel做轻量级的项目管理 教你用Excel进行项目管理

  5. 【设计模式六大原则3】依赖倒置原则(Dependence Inversion Principle)

      定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 问题由来:类A直接依赖类B,假如要将类A改为依赖类C,则必须通过修改类A的代码来达成.这种场景下,类 ...

  6. Spring @ Component 的作用

    1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...

  7. 集合、拆箱、装箱、自定义集合的foreach

    集合部分 参考:http://msdn.microsoft.com/zh-cn/library/0ytkdh4s(v=vs.110).aspx 集合类型是诸如哈希表.队列.堆栈.包.字典和列表等数据集 ...

  8. IOS NSPredicate 查询、搜索

    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 最常用到的函数 + (NSPredicate *)predicateWith ...

  9. **bootstrap常见常用样式总结

    1.水平居中 用 .text-center 类

  10. POJ 2407 Relatives(欧拉函数)

    题目链接 题意 : 求小于等于n中与n互质的数的个数. 思路 : 看数学的时候有一部分是将欧拉函数的,虽然我没怎么看懂,但是模板我记得了,所以直接套了一下模板. 这里是欧拉函数的简介. #includ ...