多表联查还是不太懂

多表联查还是不太懂

studentMapper

<resultMap id="forCourse" type="com.damu.entity.Student">
    <id property="id" column="id"></id>
    <!-- <result column="name" property="studentName"></result> -->
    <collection property="courses" column="id" ofType="com.damu.entity.Course" select="getCourse">
    </collection>
</resultMap>
<select id="getCourse" resultMap="forCourse">
    select * from student where id=#{id}
</select>

studentDao

public List<Student> findStudentCourse(int id) {
    try {
        list = getSession().selectList("getCourse",new Student(id));
        sqlSession.commit();

    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        sqlSession.close();
    }
    return list;
}

输出结果:

[Student{id=2, reg_no=20171202, name='萧景琰', sex='男', age=30, grade='2008', major='哲学系'}]


怎样才能输出多表联查的那种结果,怎么我的查询和简单查询没啥两样。。

正在回答

登陆购买课程后可参与讨论,去登陆

5回答

这个错误出现的原因一般是:对象互相嵌套设置出现StackOverflowError异常

1、老师在此代码中,实现多表联查的几个条件:address 表中有userid ,作为外键关联 user表的id 

http://img1.sycdn.imooc.com//climg/5ba2fdf50001756512260524.jpg

2、UserMapper

http://img1.sycdn.imooc.com//climg/5ba2fe380001c63812200486.jpg

同学的StudentMapper不正确,你可以参考一下源码中的UserMapper

3、老师在userDao中查的是findUsers,并不是getAddress 。

而同学的studentDao 里写的是getCourse

http://img1.sycdn.imooc.com//climg/5ba3004b00012aca09820252.jpg

可以对应一下课程和学生的关系。再改一下。建议同学再听一听老师的课程。

Course 对应的是案例中的 Address  Student 对应的是 User 。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


提问者 看到我麻烦叫我去学习 2018-09-19 19:16:15

http://img1.sycdn.imooc.com//climg/5ba22fd20001573507080488.jpg

我把List<Course>  courses 这个属性 也写到 Student 的toString方法中去了,

现在报这个错误,没遇到过,不会。。。

  • 如果不重写toString方法,控制台输出这个--------------[Student{id=3, reg_no=0, name='null', sex='null', age=0, grade='null', major='null'}]
    2018-09-19 19:22:08
  • 输出的是----studentDAO.findStudentCourse(id); ----执行后返回的list集合
    2018-09-19 19:24:03
好帮手慕阿莹 2018-09-19 17:56:29

1、建议同学把List<Course>  courses 这个属性 也写到 Student 的toString方法中去。

2、http://img1.sycdn.imooc.com//climg/5ba21c2600017b8708010164.jpg

上图红框部分有应该是去Course这张表里去查。例如,老师的是去address这张表里去查地址的

http://img1.sycdn.imooc.com//climg/5ba21c5f0001298114580713.jpg


如果我的回答解决了你的疑惑,请采纳!祝学习愉快!


提问者 看到我麻烦叫我去学习 2018-09-19 11:43:44
package com.damu.entity;

import java.util.List;

public class Student {
    private int id;
    private int reg_no;
    private String name;
    private String sex;
    private int age;
    private String grade;
    private String major;
    private List<Course> courses;

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", reg_no=" + reg_no +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                ", grade='" + grade + '\'' +
                ", major='" + major + '\'' +
                '}';
    }

    public Student() {
    }

    public Student(int id) {
        this.id = id;
    }

    public Student(int id, int reg_no, String name, String sex, int age, String grade, String major) {
        this.id = id;
        this.reg_no = reg_no;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.grade = grade;
        this.major = major;
    }

    public Student(int reg_no, String name, String sex, int age, String grade, String major) {
        this.reg_no = reg_no;
        this.name = name;
        this.sex = sex;
        this.age = age;
        this.grade = grade;
        this.major = major;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getReg_no() {
        return reg_no;
    }

    public void setReg_no(int reg_no) {
        this.reg_no = reg_no;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public List<Course> getCourses() {
        return courses;
    }

    public void setCourses(List<Course> courses) {
        this.courses = courses;
    }
}


这个是Student类

但是数据表中的student是没有course属性的。

好帮手慕珊 2018-09-19 11:38:02

你好!你的Student类是怎么写的,Course是否是Student的一个属性?建议把Student类的代码贴出来看看。祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java数据库开发与实战应用2018版
  • 参与学习           人
  • 提交作业       277    份
  • 解答问题       4297    个

Java数据库开发的必备技能,从流行的MySQL数据库开始,到Java原生的数据库管理接口JDBC的使用,再到常用的数据持久化框架MyBatis,让你向Java工程师的目标又迈进了一步!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师