查询导师 下面的所有 老师的信息!

创建实体类 和对应的数据库

/**
*导师的实体类
*/
public class Teacher {
private Integer id;
private String name;
//导师下所有的老师
private Set<Teacher> teachers; public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(Set<Teacher> teachers) {
this.teachers = teachers;
}
public Teacher(Integer id, String name, Set<Teacher> teachers) {
super();
this.id = id;
this.name = name;
this.teachers = teachers;
}
public Teacher() {
super();
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + ", teachers="
+ teachers + "]";
}
}

创建对应的mapper文件和dao

public interface TeacherDao {
/**
* 根据导师的编号查询所有的老师信息
* 相当于递归查询
*/
List<Teacher> selectTeahcerByTid(Integer tId);
}
<?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="cn.bdqn.dao.TeacherDao"> <resultMap type="Teacher" id="teacherMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- 设置关联集合的属性
select="selectTeahcerByTid"
因为查询的结果都是一样的 递归查询
column="id"
根据查询到的id再作为参数进行下一次的查询
-->
<collection property="teachers" ofType="Teacher"
select="selectTeahcerByTid" column="id"/>
</resultMap> <select id="selectTeahcerByTid" resultMap="teacherMap">
select id,name from teacher where tid=#{xxx}
</select> </mapper>

mybatis.xml中管理mapper文件

    <!-- 加载映射文件信息 -->
<mappers>
<mapper resource="cn/bdqn/dao/TeacherMapper.xml" />
</mappers>

测试代码

package cn.bdqn.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import cn.bdqn.bean.Teacher;
import cn.bdqn.dao.TeacherDao;
import cn.bdqn.util.SessionUtil; public class TeacherTest {
TeacherDao dao;
SqlSession session; @Before
public void before() {
// 因为需要关闭session 需要把session提取出去
session = SessionUtil.getSession();
dao = session.getMapper(TeacherDao.class);
} @After
public void after() {
if (session != null) {
session.close();
}
} /**
* 根据导师的id查询出对应的所有老师信息
*/
@Test
public void test1() {
List<Teacher> list = dao.selectTeahcerByTid(1);
for (Teacher teacher : list) {
System.out.println(teacher);
}
} }

查询导师 的信息 以及 下面的所有 老师的信息!

修改dao 和 mapper文件

public interface TeacherDao {
/**
* 根据导师的编号查询所有的老师信息以及自身的信息
*/
Teacher selectTeahcerById(Integer tId);
}
<?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="cn.bdqn.dao.TeacherDao"> <select id="selectTeahcerByTid" resultMap="teacherMap">
select id,name from teacher where tid=#{xxx}
<!--#{xxx} 就是再根据tid查询对应的子项 -->
</select> <resultMap type="Teacher" id="teacherMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<!-- 设置关联集合的属性
select="selectTeahcerByTid"
因为查询的结果都是一样的 递归查询
column="id"
根据查询到的id再作为tid进行下一次的查询
-->
<collection property="teachers" ofType="Teacher"
select="selectTeahcerByTid" column="id"/>
</resultMap> <select id="selectTeahcerById" resultMap="teacherMap">
<!--先查询出 自身的信息 -->
select id,name from teacher where id=#{xxx}
</select> </mapper>

修改测试类

    /**
* 根据导师的id查询出对应的所有老师信息
*/
@Test
public void test1() {
Teacher teacher = dao.selectTeahcerById(1);
System.out.println(teacher);
}

mybatis09--自连接一对多查询的更多相关文章

  1. mybatis0205 一对多查询 复杂

    查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息 1.1sql 主查询表:用户信息 关联查询:订单.订单明细,商品信息 SELECT orders.*, user ...

  2. mybatis0204 一对多查询

    查询所有订单信息及订单下的订单明细信息. sql语句 主查询表:订单表 关联查询表:订单明细 SELECT orders.*, user.username, user.sex , orderdetai ...

  3. Mybatis一对多查询得不到多方结果

    一对多查询:一个年级对应多个学生,现在要查询年级(带学生)信息. 查询结果: [main] INFO com.java1234.service.GradeTest - 查询年级(带学生)[main] ...

  4. 非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通过id进行维护与建文件

     非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通 ...

  5. flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询

    一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...

  6. sql 一对多查询

    1. 一对多查询 查询departmentinfo字典下所有部门的人员数量 select * from departmentinfo a left join (select count(*) User ...

  7. mybatis的一对一,一对多查询,延迟加载,缓存介绍

    一对一查询 需求 查询订单信息关联查询用户信息 sql语句 /*通过orders关联查询用户使用user_id一个外键,只能关联查询出一条用户记录就可以使用内连接*/ SELECT orders.*, ...

  8. mybatis由浅入深day02_3一对多查询

    3 一对多查询 3.1 需求(查询订单及订单明细的信息) 查询订单及订单明细的信息. 3.2 sql语句 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. ...

  9. Excel一对多查询(index+small+if)

    一.学习 一对多查询模式化数组公式: =INDEX(区域,SMALL(IF(条件,行号数组,4^8),ROW(A1))) 三键齐按(ctrl+shift+回车) 在具有多个符合条件的情况下,提取和匹配 ...

  10. hibernate一对多查询

    一对多查询 1,同时添加老师和学生案例 在进行具有关联关系的对象同时添加时 首先绑定对像间的关系 ---将多方关联一方 ---将一方关联多方 然后全部添加 备注: 1,保存老师对象时, 由于设置了学生 ...

随机推荐

  1. 让你的app在iPhoneX中全屏显示

    如果你的项目什么也不修改,直接把你的app运行在 iPhone X 模拟器下,很有可能就会出现下面的情形: 上下都有黑边,没有全屏显示 为了让app能够全屏显示,你需要准备以下的内容 Xcode 9. ...

  2. set 容器的用法

    1.set容器的理解 所有元素都会根据元素的键值自动排序,set元素的键值就是实值,实值就是键值.set不允许两个元素有相同的键值.(set的元素不像map那样可以同时拥有实值(value)和键值(k ...

  3. puttygen 命令行 id_rsa.pub 转 ppk

    网上只有puttygen GUI程序的说明,我是linux下的环境,懒得切换到win下了,putty 也有linux版本的,不过可用软件会少点,且GUI会没win下完善. 其实 一条命令搞定: put ...

  4. idea插件actiBPM源码

    actiBPM https://github.com/Activiti/Activiti

  5. shell编程学习笔记(七):Shell中将指定内容输出到文件中

    我们这里把echo要打印的内容输出到文件中 以下蓝色字体部分为Linux命令,红色字体的内容为输出的内容: # cd /opt/scripts # vim script06.sh 开始编写script ...

  6. webpack 配置缓存

    1.输出文件的文件名 加hash 2.提取引导模板 3.模块标识符 https://webpack.docschina.org/guides/caching/#src/components/Sideb ...

  7. 每天一个linux命令:find

    1.命令简介         find(find) 命令用来在指定目录下查找文件.任何位于参数之前的字符串都将被视为欲查找的目录名.如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子 ...

  8. php5.6.11编译安装报错configure: error: Don't know how to define struct flock on this system

    centos 6.8 32位系统下,安装php.5.6.11是出现这个错误 解决办法: 1 2 3 4 vim /etc/ld.so.conf.d/local.conf     # 编辑库文件 /us ...

  9. 【C++】C++中变量的声明与定义的区别

    声明(declaration):意味着告诉编译器关于变量名称.变量类型.变量大小.函数名称.结构名称.大小等等信息,并且在声明阶段不会给变量分配任何的内存. 定义(definition):定义就是在变 ...

  10. Xcode真机调试失败:The identity used to sign the executable is no longer valid

    在Xcode中突然好久没有使用真机调试了.今天使用真机的时候.出现例如以下的警告.并真机执行失败: The identity used to sign the executable is no lon ...