mybatis11--多對多關聯查詢
阿新 • • 發佈:2017-06-29
div 3.0 ctype his prop 1.0 加載 hash oct
多對多關聯! 其實就是兩個一對多的關聯! 比如說 一個學生可以有多個老師!一個老師可以有多個學生!
那麽 學生和老師之間的關系 可以理解為 多對多的關聯關系!
關鍵是怎麽建立數據庫中兩個表之間的關系???
這時候需要一個中間表來組織兩張表的關系!
創建對應的數據庫表!
student表
teacher表
middle表
創建對應的實體類
/** *學生對應的實體類 */ public class Student { private Integer sId; private String sName;//一個學生可以有多個老師 private Set<Teacher> teachers=new HashSet<Teacher>(); public Integer getsId() { return sId; } public void setsId(Integer sId) { this.sId = sId; } public String getsName() { return sName; } public void setsName(String sName) {this.sName = sName; } public Set<Teacher> getTeachers() { return teachers; } public void setTeachers(Set<Teacher> teachers) { this.teachers = teachers; } public Student(Integer sId, String sName, Set<Teacher> teachers) { super(); this.sId = sId; this.sName = sName; this.teachers = teachers; } public Student() { super(); } //在雙向關聯的時候 只能一方顯示關聯信息 否則會出現stackOverflow 異常 @Override public String toString() { return "Student [sId=" + sId + ", sName=" + sName + ", teachers=" + teachers + "]"; } }
/** *老師的實體類 */ public class Teacher { private Integer tId; private String tName; //一個老師可以有多個學生 private Set<Student> students=new HashSet<Student>(); public Integer gettId() { return tId; } public void settId(Integer tId) { this.tId = tId; } public String gettName() { return tName; } public void settName(String tName) { this.tName = tName; } public Set<Student> getStudents() { return students; } public void setStudents(Set<Student> students) { this.students = students; } public Teacher(Integer tId, String tName, Set<Student> students) { super(); this.tId = tId; this.tName = tName; this.students = students; } public Teacher() { super(); } @Override public String toString() { return "Teacher [tId=" + tId + ", tName=" + tName + ", students=" + students.size() + "]"; } }
創建對應的dao
public interface StudentDao { /** * 根據學生的編號查詢所有對應老師信息 */ Student selectTeahcerById(Integer tId); }
創建對應的mapper文件
<?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.StudentDao"> <resultMap type="Student" id="studentMap"> <id property="sId" column="sid"/> <result property="sName" column="sname"/> <!-- 設置關聯集合的屬性 --> <collection property="teachers" ofType="Teacher"> <id property="tId" column="tid"/> <result property="tName" column="tname"/> </collection> </resultMap> <!-- 根據學生的編號查詢所有對應老師信息 --> <select id="selectTeahcerById" resultMap="studentMap"> select sid,sname,tid,tname from student,middle,teacher where sid=studentId and tid=teacherId and sid=#{xxx} </select> </mapper>
在mybatis.xml文件中管理mapper文件
<!-- 加載映射文件信息 --> <mappers> <mapper resource="cn/bdqn/dao/StudentMapper.xml" /> </mappers>
創建對應的測試類
public class TeacherTest { StudentDao dao; SqlSession session; @Before public void before() { // 因為需要關閉session 需要把session提取出去 session = SessionUtil.getSession(); dao = session.getMapper(StudentDao.class); } @After public void after() { if (session != null) { session.close(); } } /** * 根據老師的編號查詢所有的導師信息 */ @Test public void test1() { Student student = dao.selectTeahcerById(1); System.out.println(student); } }
mybatis11--多對多關聯查詢