您的位置:首页 > 其它

MyBatis一对多关联查询总结(五)

2017-07-25 22:13 211 查看
1:Classes2

package com.mybatis.domain;

import java.util.List;

public class Classes2 {
//定义实体类的属性,与class表中的字段对应

    private Integer id;            //id===>c_id

    private String name;    //name===>c_name

     /**

     * class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性,

      * 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的

     */

   private Teacher teacher;

   private List<Student> students;

   public Classes2() {
}
public Classes2(String name) {
this.name = name;
}
public Classes2(Integer id, String name, Teacher teacher) {
this.id = id;
this.name = name;
}

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 Teacher getTeacher() {
return teacher;

}

public void setTeacher(Teacher teacher) {
this.teacher = teacher;

}

public List<Student> getStudents() {
return students;

}

public void setStudents(List<Student> students) {
this.students = students;

}

@Override

public String toString() {
return "Classes2 [id=" + id + ", name=" + name + ", teacher=" + teacher
+ ", students=" + students + "]";

}

}

2:Teacher

package com.mybatis.domain;

// 定义teacher表对应的实体类

public class Teacher {
//定义实体类的属性,与teacher表中的字段对应
private Integer id;       //id===>t_id
private String name;    //name===>t_name
public Teacher() {
}
public Teacher(String name) {
this.name = name;
}
public Teacher(Integer id, String name) {
this.id = id;
this.name = name;
}
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;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}

}

3:Student

package com.mybatis.domain;

///定义student表所对应的实体类

public class Student {
//定义属性,和student表中的字段对应

    private Integer id;      //id===>s_id

    private String name;    //name===>s_name
public Student() {
}
public Student(String name) {
this.name = name;
}
public Student(Integer id, String name) {
this.id = id;
this.name = name;
}

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;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}

    

}

4:Classes2Mapper

package com.mybatis.dao;

import com.mybatis.domain.Classes2;

public interface Classes2Mapper {
public Classes2 getClasses2AndTeacherWithStudents(Integer id);

}

5:Classes2Mapper.xml

<?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="com.mybatis.dao.Classes2Mapper">
<!-- 

        根据classId查询对应的班级信息,包括学生,老师

     -->

     <!-- 

      方式一: 嵌套结果: 使用嵌套结果映射来处理重复的联合结果的子集

      SELECT * FROM class c, teacher t,student s WHERE c.teacher_id=t.t_id AND c.C_id=s.class_id AND  c.c_id=1

      -->

       <resultMap type="com.mybatis.domain.Classes2" id="ClassResultMap3">

         <id property="id" column="c_id"/>

         <result property="name" column="c_name"/>

         <association property="teacher" column="teacher_id" javaType="com.mybatis.domain.Teacher">

             <id property="id" column="t_id"/>

            <result property="name" column="t_name"/>

         </association>

        <!-- collection:集合,表示一对多,ofType指定students集合中的对象类型 -->

         <collection property="students" ofType="com.mybatis.domain.Student">

             <id property="id" column="s_id"/>

            <result property="name" column="s_name"/>

         </collection>

     </resultMap>     

      <!-- public Classes2 getClasses2AndTeacherWithStudents(Integer id) -->

      <select id="getClasses2AndTeacherWithStudents" parameterType="java.lang.Integer" resultMap="ClassResultMap3">

         select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and  c.c_id=#{id}

     </select>

</mapper>

6:TestOneToMany

package com.mybatis.test;

import java.io.IOException;

import org.apache.ibatis.session.SqlSession;

import org.junit.Test;

import com.mybatis.dao.Classes2Mapper;

import com.mybatis.domain.Classes2;

import com.mybatis.util.MybatisUtil;

public class TestOneToMany {
@Test
public void test1() throws IOException{
 SqlSession sqlSession = MybatisUtil.getSqlSession();
     Classes2Mapper mapper=sqlSession.getMapper(Classes2Mapper.class);
     Classes2 classes=mapper.getClasses2AndTeacherWithStudents(1);
     System.out.println(classes);
     sqlSession.commit();
     sqlSession.close();
}

}

MyBatis中使用collection标签来解决一对多的关联查询,ofType属性指定集合中元素的对象类型
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: