mybatis11--多对多关联查询

多对多关联! 其实就是两个一对多的关联! 比如说 一个学生可以有多个老师!一个老师可以有多个学生!

那么 学生和老师之间的关系  可以理解为 多对多的关联关系!

关键是怎么建立数据库中两个表之间的关系???

这时候需要一个中间表来组织两张表的关系!

创建对应的数据库表!

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

}
时间: 2024-10-25 10:33:53

mybatis11--多对多关联查询的相关文章

NHibernate教程(11)--多对多关联查询

本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型: 在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的"外键关系"或者称作"父子关系"."一对多关系"和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表: 上面两

mybatis多对多关联查询——(十)

1.需求 查询用户及用户购买商品信息. 2     sql语句 查询主表是:用户表 关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表: orders.orderdetail.items SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.

mybatis 一对多和多对一关联查询

首先  数据库量表之间字段关系(没有主外键) studentmajor表的id字段对应student表里major字段 两个实体类 package com.model; import java.util.Date; public class Student { private Integer sno; private String sname; private String ssex; private Integer sclass; private StudentMajor studentmaj

Hibernate 多对一关联查询

一.单向多对一和双向多对一的区别 如果只需要从一方获取另一方数据,就用单向多对一:如果需要从双方都获取对方数据,就用双向多对一. 如果有两个对象,一个为User对象,一个为Department对象,一个用户只能属于一个部门,而一个部门可以包含多个用户.这样就是多对一关系.如下图 假设:我们需要通过用户找到所对应的部门,不需要通过部门查询该部门有哪些用户,就采用单向多对一关系 如果:我们不仅需要通过用户获取所对应的部门,还需要通过部门对象获取该部门下的用户,那么就采用双向多对一 二.单向多对一关系

beego orm 一对多、多对多 关联查询

一对多 model ype User struct {Id int64 json:"id"Name string json:"name,omitempty" orm:"size(50)"Passwords string json:"passwords" orm:"size(32)"Baby []Baby json:"baby" orm:"reverse(many)"}

Hibernate 多对多关联查询条件使用

from Brand as b inner join fetch b.styles as s where s.styleId=?

MyBatis 一对多,多对一关联查询的时候Mapper的顺序

要先写association,然后写collection:这是由DTD决定的: <resultMap ...> <association ...> </association> <collection ...> </collection > </resultMap>

[NHibernate]多对多关系(关联查询)

目录 写在前面 文档与系列文章 多对多关系关联查询 总结 写在前面 上篇文章介绍了nhibernate中对一对多关系进行关联查询的几种方式,以及在使用过程需要注意的问题.这篇文章对多对多关系的查询处理也采用上篇文章的描述方式进行说明. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHibernate]集合

NHibernate之旅(11):探索多对多关系及其关联查询

本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型: 在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的"外键关系"或者称作"父子关系"."一对多关系"和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表: 上面两

[转]NHibernate之旅(11):探索多对多关系及其关联查询

本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型: 在图上,我已经清晰的标注了表之间的关系,上两篇分析Customer和Order之间的“外键关系”或者称作“父子关系”.“一对多关系”和关联查询,这一篇以Order为中心,分析Order和Product之间的关系,直接看下面一幅图的两张表: 上面两张表关系表达的意思是:Order有多个Produc