十、关联查询

1.一对一

(1)业务扩展类

用resultType指定类的属性包含多表查询的所有字段

package nuc.hzb.entity;

public class Student {
	private int stuNo;
	private String stuName;
	private int stuAge;
	private String graName; 
	private boolean stuSex; 
	private Address address;
	
	public Student() {}

	public Student(int stuNo, String stuName, int stuAge, String graName, boolean stuSex, Address address) {
		super();
		this.stuNo = stuNo;
		this.stuName = stuName;
		this.stuAge = stuAge;
		this.graName = graName;
		this.stuSex = stuSex;
		this.address = address;
	}

	public int getStuNo() {
		return stuNo;
	}

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

	public String getStuName() {
		return stuName;
	}

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

	public int getStuAge() {
		return stuAge;
	}

	public void setStuAge(int 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 Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", stuAge=" + stuAge + ", graName=" + graName
				+ ", stuSex=" + stuSex + ", address=" + address + "]";
	}

}
package nuc.hzb.entity;

public class StudentBusiness extends Student {
	
	private int cardid;
	private String cardinfo;
	public int getCardid() {
		return cardid;
	}
    
	public void setCardid(int 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 + "]";
	}	
}
<select id="queryWithStudentBusiness" parameterType="int" resultType="StudentBusiness">
 	select s.*, c.* from student s inner join studentcard c on s.cardid = c.cardid where stuno = #{StuNo}
</select>
List<StudentBusiness> queryWithStudentBusiness(int stuno);
public static void queryWithStudentBusiness() throws IOException {
	Reader reader = Resources.getResourceAsReader("conf.xml");
	SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
	SqlSession session = sessionFactory.openSession();
	studentMapper studentmapper = session.getMapper(studentMapper.class);	
	List<StudentBusiness> studentBusinesses = studentmapper.queryWithStudentBusiness(2);
	System.out.println(studentBusinesses);
	session.close();
}

(2)resultMap

通过属性成员将2个类建立起联系

package nuc.hzb.entity;

public class StudentCard {
	
	private int cardid;
	private String cardinfo;
	
	public int getCardid() {
		return cardid;
	}
	
	public void setCardid(int cardid) {
		this.cardid = cardid;
	}
	
	public String getCardinfo() {
		return cardinfo;
	}
	
	public void setCardinfo(String cardinfo) {
		this.cardinfo = cardinfo;
	}
	
	@Override
	public String toString() {
		return "StudentCard [cardid=" + cardid + ", cardinfo=" + cardinfo + "]";
	}
	
}

package nuc.hzb.entity;

public class Student {
	private int stuNo;
	private String stuName;
	private int stuAge;
	private String graName; 
	private boolean stuSex; 
	private Address address;
	private StudentCard studentCard;
	
	public Student() {}
	
	public StudentCard getStudentCard() {
		return studentCard;
	}

	public void setStudentCard(StudentCard studentCard) {
		this.studentCard = studentCard;
	}

	public int getStuNo() {
		return stuNo;
	}

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

	public String getStuName() {
		return stuName;
	}

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

	public int getStuAge() {
		return stuAge;
	}

	public void setStuAge(int 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 Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

	@Override
	public String toString() {
		return "Student [stuNo=" + stuNo + ", stuName=" + stuName + ", stuAge=" + stuAge + ", graName=" + graName
				+ ", stuSex=" + stuSex + ", address=" + address + ", studentCard=" + studentCard + "]";
	}

}
<resultMap type="student" id="student_studentcard">
	<!-- 学生属性-->
	<id property="stuNo" column="stuno"/>
	<result property="stuName" column="stuname"/>
	<result property="stuAge" column="stuage"/>
		
	<!-- 一对一-->
	<association property="studentCard" javaType="StudentCard">
		<id property="cardid" column="cardid" />
		<result property="cardinfo" column="cardinfo" />	
	</association>
</resultMap>
	
<select id="queryWithStudentBusiness" parameterType="int" resultMap="student_studentcard">
 		select s.*, c.* from student s inner join studentcard c on s.cardid = c.cardid where stuno = #{StuNo}
</select>

2.一对多

package nuc.hzb.entity;

import java.util.List;

public class StudentClass {
	
	private int classId;
	private String className;
	
	private List<Student> students;

	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;
	}

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

	public void setStudents(List<Student> students) {
		this.students = students;
	}
	
}
<resultMap type="studentClass" id="class_student_map">
		<!-- 因为type的主类是班级,因此先配置班级的信息-->
		<id  property="classId" column="classId"/>
		<result  property="className" column="className"/>
		<!-- 配置成员属性学生,一对多;属性类型:javaType,属性的元素类型ofType -->
		<collection property="students" ofType="student">
			<id  property="stuNo" column="stuNo"/>
			<result  property="stuName" column="stuName"/>
			<result  property="stuAge" column="stuAge"/>		
		</collection>
</resultMap>
<select id="queryClassAndStudents"   parameterType="int" resultMap="class_student_map">
	select  c.*, s.* from student s inner join studentclass c on c.classid = s.classid
		where c.classid = #{classId}
</select>
StudentClass queryClassAndStudents(int classid);
public static void queryClassAndStudents() throws IOException {
	Reader reader = Resources.getResourceAsReader("conf.xml") ;
	SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
	SqlSession session = sessionFactory.openSession();
	studentMapper studentmapper = session.getMapper(studentMapper.class);	
	StudentClass studentClass  = studentmapper.queryClassAndStudents(1) ;
	System.out.println(studentClass.getClassId() + "," + studentClass.getClassName());
	List<Student> students = studentClass.getStudents() ;
	for(Student student : students) {
		System.out.println(student.getStuNo() + "," + student.getStuName() + "," + student.getStuAge());
	}
	session.close();
}	

3.注意

MyBatis:多对一,多对多的本质就是一对多的变化

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值