查詢導師 下面的所有 老師的信息!
創建實體類 和對應的數據庫
/** *導師的實體類 */ 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); }