實體類和資料庫多對一和一對多對映
用Teacher類和Grade舉例,Teacher類包含grade類的屬性,Grade也包含Teacher類的屬性,但是Grade中的Teaher屬性要用List<Teahcer> 這就是多對一和一對多,實體類程式碼如下:
-----------------------------------程式碼開始----------------------------------
grade:
package com.entity;
import java.util.List;
public class Grade {
private int gradeId;
private String gradeName;
private List<Teacher> teachers;
public List<Teacher> getTeachers() {
return teachers;
}
public void setTeachers(List<Teacher> teachers) {
this.teachers = teachers;
}
public int getGradeId() {
return gradeId;
}
public void setGradeId(int gradeId) {
this.gradeId = gradeId;
}
public String getGradeName() {
return gradeName;
}
public void setGradeName(String gradeName) {
this.gradeName = gradeName;
}
@Override
public String toString() {
return "Grade [gradeId=" + gradeId + ", gradeName=" + gradeName + "]";
}
}
teacher:
package com.entity;
public class Teacher {
private int teaId;
private String teaName;
private int teaAge;
private Grade grade;
public int getTeaId() {
return teaId;
}
public void setTeaId(int teaId) {
this.teaId = teaId;
}
public String getTeaName() {
return teaName;
}
public void setTeaName(String teaName) {
this.teaName = teaName;
}
public int getTeaAge() {
return teaAge;
}
public void setTeaAge(int teaAge) {
this.teaAge = teaAge;
}
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
@Override
public String toString() {
return "Teacher [teaId=" + teaId + ", teaName=" + teaName + ", teaAge=" + teaAge + ", grade=" + grade
+ "]";
}
}
-----------------------------------程式碼結束----------------------------------
然後mapper對映檔案就是重中之重,程式碼如下:
-----------------------------------程式碼開始----------------------------------
grade:
<?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="com.dao.GradeDAO" >
<!--
這裡把grade分成了兩部分,第二部分繼承第一部分同時引用teacherMapper檔案中的型別,因為一對多的時候會
用到第二部分,但是一對一的時候用第二部分會降低效率,所以那時用第一部分效率高一點
-->
<resultMap type="Grade" id="BaseResultMap">
<id column="gradeId" property="gradeId"/>
<result column="gradeName" property="gradeName"/>
</resultMap>
<resultMap type="Grade" id="FullResultMap" extends="BaseResultMap">
<collection property="teachers" resultMap="com.dao.TeacherDAO.BaseResultMap"/>
</resultMap>
<!-- 注意這裡的resultMap一定不要錯寫成resultType -->
<select id="getAllWithTeachers" resultMap="FullResultMap">
select * from grade g inner join teacher t on g.gradeId=t.gradeId
</select>
</mapper>
teacher:
<?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="com.dao.TeacherDAO">
<resultMap type="Teacher" id="BaseResultMap">
<id column="teaId" property="teaId"/>
<result column="teaName" property="teaName"/>
<result column="teaAge" property="teaAge"/>
</resultMap>
<resultMap type="Teacher" id="FullResultMap" extends="BaseResultMap">
<!-- property的意思是屬性,在這裡代表的是實體類的某個屬性名,如果實體類中沒有這個屬性名,則會報錯 -->
<association property="grade" resultMap="com.dao.GradeDAO.BaseResultMap"/>
</resultMap>
<select id="getAll" resultMap="FullResultMap">
select * from teacher t inner join grade g on t.gradeId=g.gradeId
</select>
</mapper>
-----------------------------------程式碼結束----------------------------------
接下來就可以測試了,程式碼如下:
-----------------------------------程式碼開始----------------------------------
package com.test;
import java.util.List;
import org.junit.Test;
import com.dao.GradeDAO;
import com.dao.TeacherDAO;
import com.dao.impl.GradeDAOImpl;
import com.dao.impl.TeacherDAOImpl;
import com.entity.Grade;
import com.entity.Teacher;
public class TeacherDAOTest {
@Test
public void testGetAll(){
TeacherDAO teacher=new TeacherDAOImpl();
List<Teacher> teaList= teacher.getAll();
for(Teacher tea:teaList){
System.out.println(tea);
}
}
@Test
public void testGetAllWithTeachers(){
GradeDAO grade=new GradeDAOImpl();
List<Grade> gradeList= grade.getAllWithTeachers();
for(Grade g:gradeList){
System.out.println(g);
for(Teacher tea:g.getTeachers()){
System.out.println("\t"+tea.getTeaName());
}
}
}
}
-----------------------------------程式碼結束----------------------------------