Mybatis一对多,多对一

1.一对多

一对多很好理解,就像是一个老师有很多个学生,那么就是一对多,一个老师对应多个学生

学生实体类

package Models;

public class Student {
    private  int cid;
    private String cname;
    private int teacherid;

    public Student(int cid, String cname, int teacherid) {
        this.cid = cid;
        this.cname = cname;
        this.teacherid = teacherid;
    }

    public int getCid() {
        return cid;
    }

    public void setCid(int cid) {
        this.cid = cid;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public int getTeacherid() {
        return teacherid;
    }

    public void setTeacherid(int teacherid) {
        this.teacherid = teacherid;
    }

    @Override
    public String toString() {
        return "Student{" +
                "cid=" + cid +
                ", cname='" + cname + '\'' +
                ", teacherid=" + teacherid +
                '}';
    }
}

老师实体类

package Models;

import java.util.List;

public class Teacher {
    private int tid;
    private String tname;
    //老师拥有多个学生
    private List<Student> students;

    public Teacher(int tid, String tname, List<Student> students) {
        this.tid = tid;
        this.tname = tname;
        this.students = students;
    }

    public int getTid() {
        return tid;
    }

    public void setTid(int tid) {
        this.tid = tid;
    }

    public String getTname() {
        return tname;
    }

    public void setTname(String tname) {
        this.tname = tname;
    }

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

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

    @Override
    public String toString() {
        return "Teacher{" +
                "tid=" + tid +
                ", tname='" + tname + '\'' +
                ", students=" + students +
                '}';
    }
}

不管是一对多还是多对一,都是有两种实现方法

一种是按照结果嵌套查询,一种是按照查询嵌套处理

我个人觉得第一种简单一些,本文也之介绍第一种

Mapper.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="Mapper.TeacherMapper">
    <select id="getTeacher1" resultMap="TeacherStudent">
        SELECT c_id cid,c_name cname,t_name tname,t_id tid,teacher_id teacherid FROM class a,teacher t
        WHERE a.teacher_id=t.t_id AND t.t_id=#{ttid}
    </select>
    <resultMap id="TeacherStudent" type="Teacher">
        <result property="tname" column="tname"/>
        <result property="tid" column="tid"></result>
        <collection property="students" ofType="Student">
            <result property="cid" column="cid"></result>
            <result column="cname" property="cname"></result>
            <result column="teacherid" property="teacherid"></result>

        </collection>



    </resultMap>
</mapper>

复杂的属性,我们要单独处理对象用association,它也是多对一的时候使用

集合使用collection,一般是一对多的时候使用,javaType是指定属性类型

集合中的泛型信息,我们用ofType获取

测试类就不写了

2.多对一

学生实体类 

package Mpdels;

import org.apache.ibatis.type.Alias;


public class User {

    //定义实体类的属性,与class表中的字段对应
    private int id;            //id===>c_id
    private String name;    //name===>c_name

    /**
     * class表中有一个teacher_id字段,所以在Classes类中定义一个teacher属性,
     * 1    * 用于维护teacher和class之间的一对一关系,通过这个teacher属性就可以知道这个班级是由哪个老师负责的
     */
    private Teacher teacher;

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

    @Override
    public String toString() {
        return "Classes [id=" + id + ", name=" + name + ", teacher=" + teacher + "]";
    }
}

老师实体类

package Mpdels;


public class Teacher {

    private int id;            //id===>t_id

    private String name;    //name===>t_name


    public int getId() {
        return id;

    }


    public void setId(int 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 + "]";
    }
}

Mapper.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">
<!--namespace绑定一个Mapper接口-->
<mapper namespace="myMapper.UserMapper">
    <!--id绑定接口里面的方法,resultType是指返回类型-->


    <select id="getInner" parameterType="int" resultMap="ClassResultMap">
                select c_id cid,c_name cname,t_name tname from class c, teacher t where c.teacher_id=t.t_id
             </select>
        <!-- 使用resultMap映射实体类和字段之间的一一对应关系 -->
        <resultMap type="Mpdels.User" id="ClassResultMap">
            <result property="id" column="cid"/>
            <result property="name" column="cname"/>
            <association property="teacher" javaType="Mpdels.Teacher">
                <result property="name" column="tname"/>
             </association>
          </resultMap>

</mapper>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值