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:多对一,多对多的本质就是一对多的变化