7.28--SSH学习之MyBatis多表关联查询

承接上个文章,实体类有Student表,Class表,Score表,Subject表,stusub表

在StudentMapper.xml映射文件中配置,需要注意的是mybatis配置关联关系没有单双向,另外在某一类映射文件中只配与该类有关的属性和关系,其他类不配

StudentMapper.xml

    <!-- 学生和班级相关联 -->
    <resultMap type="com.su.domain.Student" id="StudentWithClasses">
        <id column="stuid" property="stuId" />
        <result column="stuname" property="stuName"/>
        <result column="stugender" property="stuGender"/>
        <result column="stuage" property="stuAge"/>
        <result column="classesid" property="classesId"/>
        <association property="classes" javaType="com.su.domain.Classes">
            <id column="classesid" property="classesId" />
            <result column="classesname" property="classesName"/>
        </association>  
    </resultMap>

    <!-- 学生、班级、成绩,相关联 -->
    <resultMap type="com.su.domain.Student" id="StudentWithScore" extends="StudentWithClasses">
        <collection property="scoreList" ofType="com.su.domain.Score">
            <id column="scoreid" property="scoreId"/>
            <result column="stuid" property="stuId"/>
            <result column="subjectid" property="subjectId"/>
            <result column="score" property="score"/>
        </collection>
    </resultMap>

    <!-- 学生、班级、科目,相关联 -->
    <resultMap type="com.su.domain.Student" id="StudentWithSubject" extends="StudentWithClasses">
        <collection property="subjectList" ofType="com.su.domain.Subject">
            <id column="subjectid" property="subjectId"/>
            <result column="subjectname" property="subjectName"/>
            <result column="subjecthour" property="subjectHour"/>
        </collection>
    </resultMap>

<!-- 查询学生和班级 -->
    <select id="findStudentWithClasses" resultMap="StudentWithClasses">
        select student.*,classes.classesname from student,classes 
        where student.classesid = classes.classesid
    </select>

    <!-- 查询学生班级成绩 -->
    <select id="findStudentWithScore" resultMap="StudentWithScore">
        select student.*,classes.classesname,score.* from student,classes,score 
        where student.classesid = classes.classesid and score.stuid=student.stuid
    </select>

    <!-- 查询学生班级科目 -->
    <select id="findStudentWithSubject" resultMap="StudentWithSubject">
        select student.*,classes.classesname,subject.* from student,classes,subject,stusubtab
        where student.classesid = classes.classesid 
        and stusubtab.stuid = student.stuid and stusubtab.subjectid = subject.subjectid
    </select>


StudentMapper.java接口中需要配置方法

import java.util.List;

import com.su.domain.Student;

public interface StudentMapper {

    public List<Student> findAllStudents();

    public Student findStudentById(Integer stuId);

    public void addStudent(Student stu);

    public void updateStudent(Student stu);

    public void deleteStudent(Integer stuId);

    public List<Student> findStudentWithClasses();

    public List<Student> findStudentWithScore();

    public List<Student> findStudentWithSubject();
}


因为是在Student的映射文件中配置,所以只配了以Student为主体的属性,例如:Score,Subject.Classes,都在Student下的标签。

Student.java

package com.su.domain;

import java.util.ArrayList;
import java.util.List;

public class Student {
    private Integer stuId;
    private String stuName;
    private String stuGender;
    private Integer stuAge;
    private Integer classesId;

    private Classes classes;
    private List<Score> scoreList = new ArrayList<Score>();
    private List<Subject> subjectList = new ArrayList<Subject>();

    public List<Score> getScoreList() {
        return scoreList;
    }
    public void setScoreList(List<Score> scoreList) {
        this.scoreList = scoreList;
    }
    public List<Subject> getSubjectList() {
        return subjectList;
    }
    public void setSubjectList(List<Subject> subjectList) {
        this.subjectList = subjectList;
    }
    public Classes getClasses() {
        return classes;
    }
    public void setClasses(Classes classes) {
        this.classes = classes;
    }
    public Integer getClassesId() {
        return classesId;
    }
    public void setClassesId(Integer classesId) {
        this.classesId = classesId;
    }
    public Integer getStuId() {
        return stuId;
    }
    public void setStuId(Integer stuId) {
        this.stuId = stuId;
    }
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public String getStuGender() {
        return stuGender;
    }
    public void setStuGender(String stuGender) {
        this.stuGender = stuGender;
    }
    public Integer getStuAge() {
        return stuAge;
    }
    public void setStuAge(Integer stuAge) {
        this.stuAge = stuAge;
    }
}


测试类:

package com.su.test;

import java.io.InputStream;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.su.domain.Student;
import com.su.domain.Subject;
import com.su.mapper.StudentMapper;

public class TestStudentMapper {

    public static void main(String[] args) {
        try{
            //加载配置文件
            InputStream is = Resources.getResourceAsStream("mybatisconfig.xml");
            //创建SqlSessionFactory对象
            SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(is);
            //创建SqlSession
            SqlSession ss = ssf.openSession();

            StudentMapper sm = ss.getMapper(StudentMapper.class);

            //查询全部学生
//          List<Student> list = sm.findAllStudents();
//          for(Student stu : list){
//              System.out.println("名字:"+stu.getStuName()+"\t++++年龄:"+stu.getStuAge());
//          }

            //关联查询学生和班级
//          List<Student> stulist = sm.findStudentWithClasses();
//          for(Student stu: stulist){
//              System.out.println(stu.getStuName()+"\t"+stu.getClasses().getClassesName());
//          }

            //关联查询学生班级成绩
//          List<Student> stulist = sm.findStudentWithScore();
//          for(Student stu : stulist){
//              System.out.println(stu.getStuName()+"\t"+stu.getClasses().getClassesName());
//              for(Score se : stu.getScoreList()){
//                  System.out.println(se.getSubjectId()+"\t"+se.getScore());
//              }
//          }

            //关联查询学生班级科目
            List<Student> stulist = sm.findStudentWithScore();
            for(Student stu : stulist){
                System.out.println(stu.getStuName()+"\t"+stu.getClasses().getClassesName());
                for(Subject sb : stu.getSubjectList()){
                    System.out.println(sb.getSubjectName()+"\t"+sb.getSubjectHour());
                }
            }   
        }catch(Exception e){
            e.printStackTrace();
        }
    }
}


今天复习内容,供以后复习


Author:su1573

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ssy03092919

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值