mybatis09--自连接一对多查询

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

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

/**
 *导师的实体类
 */
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);
        }
时间: 2024-12-14 12:11:21

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

mybatis0205 一对多查询 复杂

查询所有用户信息,关联查询订单及订单明细信息及商品信息,订单明细信息中关联查询商品信息 1.1sql 主查询表:用户信息 关联查询:订单.订单明细,商品信息 SELECT orders.*, user.username, user.sex , orderdetail.id orderdetail_id, orderdetail.items_num, orderdetail.items_id, items.name items_name, items.detail items_detail FRO

mybatis0204 一对多查询

查询所有订单信息及订单下的订单明细信息. sql语句 主查询表:订单表 关联查询表:订单明细 SELECT orders.*, user.username, user.sex , orderdetail.id orderdetail_id, orderdetail.items_num, orderdetail.items_id FROM orders, USER, orderdetail WHERE orders.user_id = user.id AND orders.id = orderde

mybatis学习笔记(11)-一对多查询

mybatis学习笔记(11)-一对多查询 mybatis学习笔记11-一对多查询 示例 小结 本文实现一对多查询,查询订单及订单明细的信息 示例 sql 确定主查询表:订单表 确定关联查询表:订单明细表 在一对一查询基础上添加订单明细表关联即可. SELECT orders.*, user.username, user.sex, user.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.item

Mybatis最入门---ResultMaps实例篇(一对多查询)

[一步是咫尺,一步即天涯] 接上文,我们来演示在实际开发中,如何配置和使用resultMap实现一对多查询. 准备工作: a.操作系统 :win7 x64 b.基本软件:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基础 特别的,作为演示程序,还请各位看官不要纠结数据库的细节内容 ----------------------------------------------------------------------------------------------

Hibernate(二)——一对多查询

1. 前言 本章节我们讨论Hibernate一对多查询的处理. 在上一章节中(Hibernate(一)——入门),我们探讨了Hibernate执行最基本的增删改查操作.现在我们将情况复杂化:加入我们在查询用户信息的时候需要同时查询其登录日志,这样就涉及到一对多查询.那么一对多查询要怎么实现么? 2. jar包准备 在本节中,除了上一章节中用到的jar包,我还需要用log4j.jar来将Hibernate的查询语句输出到控制台.log4j.properties的配置如下: 1 log4j.root

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

一.学习 一对多查询模式化数组公式: =INDEX(区域,SMALL(IF(条件,行号数组,4^8),ROW(A1))) 三键齐按(ctrl+shift+回车) 在具有多个符合条件的情况下,提取和匹配方法~ 我们需要解决三种类型的问题: 1,李商隐第一次出现时的B列值: 2,李商隐最后一次出现时的B列值: 3,李商隐第n次出现时候的B列值(假设n=2). 前面两个问题是比较常见的,我们简要一看. 匹配第一个,可以直接用: =VLOOKUP(E2,A2:B17,2,FALSE) 匹配最后一个,可以

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

非关心数据库无法进行连表查询 所以我们需要在进行一对多查询时候 无法满足 因此需要在"1"的一方添加"多"的一方的的id 以便用于进行连表查询 ; 核心思想通过id进行维护与建文件 原文地址:https://www.cnblogs.com/classmethond/p/10562396.html

一对多查询的万金油公式

一对多查询的万金油公式 2019-01-06  作者:ExcelHome  阅读:43011次 我们对数据进行查询时,经常会使用VLOOKUP函数.但有时,我们会碰到这样的问题,提取符合条件的结果是多个,而不是一个,这时候VLOOKUP就犯难了.举个例子,如下图,左侧A1:C10是一份学员名单表,现在需要根据F1单元格的“EH图班”这个指定的条件,在F2:F10单元格区域中,提取该班级全部学员名单.今天说一个函数查询方面的万金油套路:INDEX+SMALL.F2单元格输入以下数组公式,按住Ctr

Dapper 一对多查询 one to many

原文:Dapper 一对多查询 one to many 参考文档:Dapper one to many Table public class Person { public int Id { get; set; } public string Name { get; set; } public int Born { get; set; } public Country Residience { get; set; } public ICollection<Book> Books { get;

三层架构的一点理解以及Dapper一对多查询

1.首先说一下自己对三层架构的一点理解 论坛里经常说会出现喜欢面相对象的写法,所以使用EF的,我个人觉得他俩没啥关系,先别反对,先听听我怎么说吧. 三层架构,基本都快说烂了,但今天还是说三层架构:UI,BLL,DAL.之前往往强调的是三层架构各司其职,但没有说三层架构中每层之间怎么交互的,以及人员之间的分工合作问题.今天重点说这个,从而回答面向对象和EF的关系. 今天说的与数据库有关,那就先说BLL和DAL之间数据的传递.有不少都是按照以下两种方式写的: (1)以Datatable传递.可想想,