zoukankan      html  css  js  c++  java
  • Mybatais11 多对多关联查询

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

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

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

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

    创建对应的数据库表!

    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);
        }
        
    }
  • 相关阅读:
    【机器学习具体解释】概率生成模型与朴素贝叶斯分类器
    Android中经常使用的bitmap处理方法
    微信第三方平台开发流程
    Java 文章链接
    Axure实现banner功能
    poi实现excel的导入导出功能
    github- 优秀资源总结
    java进阶文章优选链接,面试干货集合
    百万it资源百度网盘链接分享
    MySQL-Access denied for user 'username'@'localhost' (using password: YES) 解决
  • 原文地址:https://www.cnblogs.com/kaisadadi/p/7612311.html
Copyright © 2011-2022 走看看