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);
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM