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

来源:互联网 发布:linux snmp 监控cpu 编辑:程序博客网 时间:2024/06/06 00:49

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属性指定集合中元素的对象类型

原创粉丝点击