课时8:一对一关联查询和一对多查询

.1)常见的关联关系

  1.一对一,多对一,一对多,多对多

  2.但是在mybatis框架只有一对多,和一对一的形式, (多对一,多对多的本质就是一对多的变化)

.2)一对一

  1.业务扩展类

    1.1 创建类,继承一张表 在创建类中写另外一个表的字段 形成合并

package org.hbz.entity;

public class StudentBusiness extends Student {
    private Integer cardId;
    private String cardInfo;

    public Integer getCardId() {
        return cardId;
    }

    public void setCardId(Integer cardId) {
        this.cardId = cardId;
    }

    public String getCardInfo() {
        return cardInfo;
    }

    public void setCardInfo(String cardInfo) {
        this.cardInfo = cardInfo;
    }

    @Override
    public String toString() {
        return super.toString()+"StudentBusiness{" +
                "cardId=" + cardId +
                ", cardInfo='" + cardInfo + '\'' +
                '}';
    }
}

    1.2 创建mappersql

 <select id="queryStudentByWith00" parameterType="int" resultType="StudentBusiness">
        select s.*,c.* from student s inner join studentcart c on s.cardid=c.cartid where s.stuno=#{xx}
    </select>

      1.2.1 核心:就是让一个类的属性和数据库表的字段一一对应

  2.resultMap

    2.1 通过 属性成员 将两个类建立关系

package org.hbz.entity;

public class Student {
    private Integer stuNo;
    private String stuName;
    private Integer stuAge;
    private String graName;
    private boolean stuSex;
    private Integer cardid;
    private Studentcart studentcart;

    public Student(){}

    public Student(Integer stuNo, String stuName, Integer stuAge, String graName, boolean stuSex, Integer cardid, Studentcart studentcart) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.stuAge = stuAge;
        this.graName = graName;
        this.stuSex = stuSex;
        this.cardid = cardid;
        this.studentcart = studentcart;
    }

    public Integer getStuNo() {
        return stuNo;
    }

    public void setStuNo(Integer stuNo) {
        this.stuNo = stuNo;
    }

    public String getStuName() {
        return stuName;
    }

    public void setStuName(String stuName) {
        this.stuName = stuName;
    }

    public Integer getStuAge() {
        return stuAge;
    }

    public void setStuAge(Integer stuAge) {
        this.stuAge = stuAge;
    }

    public String getGraName() {
        return graName;
    }

    public void setGraName(String graName) {
        this.graName = graName;
    }

    public boolean isStuSex() {
        return stuSex;
    }

    public void setStuSex(boolean stuSex) {
        this.stuSex = stuSex;
    }

    public Integer getCardid() {
        return cardid;
    }

    public void setCardid(Integer cardid) {
        this.cardid = cardid;
    }

    public Studentcart getStudentcart() {
        return studentcart;
    }

    public void setStudentcart(Studentcart studentcart) {
        this.studentcart = studentcart;
    }

    @Override
    public String toString() {
        return "Student{" +
                "stuNo=" + stuNo +
                ", stuName='" + stuName + '\'' +
                ", stuAge=" + stuAge +
                ", graName='" + graName + '\'' +
                ", stuSex=" + stuSex +
                ", cardid=" + cardid +
                ", studentcart=" + studentcart +
                '}';
    }
}

    2.2 配置xml文件如下

 <select id="queryStudentByWith00" parameterType="int" resultMap="queryStudentByWith00">
        select s.*,c.* from student s inner join studentcart c on s.cardid=c.cartid where s.stuno=#{xx}
    </select>

    <resultMap id="queryStudentByWith00" type="student">
        <id property="stuNo" column="stuno"></id>
        <result property="stuName" column="stuName"></result>
        <result property="stuAge" column="stuAge"></result>
        <result property="graName" column="graName"></result>
        <result property="stuSex" column="stusex" javaType="boolean" jdbcType="INTEGER"></result>
        <result property="cardid" column="cardid"></result>
        <association property="studentcart" javaType="Studentcart">
            <id property="cartid" column="cartid"></id>
            <result property="cardinfo" column="cardinfo"></result>
        </association>
    </resultMap>   

      如果是一对一关系映射使用association标签 实现

      property填入的是属性名

      javaType填入的是属性的类型

.3)一对多

  1.通过 属性成员 将两个类建立关系

package org.hbz.entity;


import java.util.List;

public class Studentclass {

  private int classid;
  private String classname;

//  设置一对多关系  一个班级对应多个学生
  private List<Student> list;

  public List<Student> getList() {
    return list;
  }

  public void setList(List<Student> list) {
    this.list = list;
  }

  public int getClassid() {
    return classid;
  }

  public void setClassid(int classid) {
    this.classid = classid;
  }


  public String getClassname() {
    return classname;
  }

  public void setClassname(String classname) {
    this.classname = classname;
  }

  @Override
  public String toString() {
    return "Studentclass{" +
            "classid=" + classid +
            ", classname='" + classname + '\'' +
            ", list=" + list +
            '}';
  }
}

  2.配置xml如下:

<select id="queryStudentByWith01" parameterType="int" resultMap="queryStudentByWith01">
        select s.*,c.* from studentclass c inner join  student s on s.classid=c.classid where c.classid=#{xx}
    </select>
    <resultMap id="queryStudentByWith01" type="Studentclass">
        <id property="classid" column="classid"></id>
        <result property="classname" column="classname"></result>
<!--        配置成员属性一对多 如果是属性的本身类型用javaType 如果是属性的元素的类型用ofType-->
        <collection property="list" ofType="student">
            <id property="stuNo" column="stuno"></id>
            <result property="stuName" column="stuName"></result>
            <result property="stuAge" column="stuAge"></result>
            <result property="graName" column="graName"></result>
            <result property="stuSex" column="stusex" javaType="boolean" jdbcType="INTEGER"></result>
            <result property="cardid" column="cardid"></result>
        </collection>
    </resultMap>

    2.1 如果是一对多关系 使用collection标签 实现

      2.1.1 property属性名称

      2.1.2 ofType属性的泛型类类型

posted @ 2020-03-10 20:27  何邦柱  阅读(260)  评论(1编辑  收藏  举报