课时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>
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属性的泛型类类型