myBaits association 사용
1. 표의 구조
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) NOT NULL,
`gender` char(1) NOT NULL,
`major` varchar(20) NOT NULL,
`grade` char(4) NOT NULL,
`supervisor_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', ' ', ' ', ' ', '2011', '1');
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(10) NOT NULL,
`gender` char(1) NOT NULL,
`research_area` varchar(20) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('1', ' ', ' ', ' ');
2、대응하는 자바빈류
public class Student {
private int id;
private String name; //
private String gender; //
private String major; //
private String grade; //
private Teacher supervisor; //
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getMajor() {
return major;
}
public void setMajor(String major) {
this.major = major;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
public Teacher getSupervisor() {
return supervisor;
}
public void setSupervisor(Teacher supervisor) {
this.supervisor = supervisor;
}
}
public class Teacher {
private int id;
private String name; //
private String gender; //
private String researchArea; //
private List<Student> supStudents; //
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getResearchArea() {
return researchArea;
}
public void setResearchArea(String researchArea) {
this.researchArea = researchArea;
}
public List<Student> getSupStudents() {
return supStudents;
}
public void setSupStudents(List<Student> supStudents) {
this.supStudents = supStudents;
}
}
3. StudentMapper를 설정합니다.xml
<?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="org.zsm.myBatis.day02.inner.IStudentOperation">
<!-- java Bean -->
<resultMap type="Student" id="studentResultMap">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="major" property="major" />
<result column="grade" property="grade"/>
<!-- association has-a -->
<!-- : javaType , supervisor Teacher, -->
<association property="supervisor" javaType="Teacher">
<!-- -->
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
<result property="gender" column="t_gender"/>
<result property="researchArea" column="research_area"/>
</association>
</resultMap>
<!-- SQL "#{}" -->
<select id="getById" parameterType="int" resultMap="studentResultMap">
SELECT st.id,st.name,st.gender,st.major,st.grade,t.id t_id,t.name t_name,
t.gender t_gender,t.research_area
FROM student st, teacher t
WHERE st.supervisor_id = t.id
AND st.id=#{id}
</select>
</mapper>
3. 테스트
public void testAssociation(){
SqlSession session = sqlSessionFactory.openSession();
IStudentOperation studentOperation = session.getMapper(IStudentOperation.class);
Student student = studentOperation.getById(1);
System.out.println(student.getName()+" :"+student.getSupervisor().getName());
}
myBatis association의 두 가지 형식
1. 중첩된resultMap
이런 방법의 본질은 교사의 실체를 association 요소에서 추출하여 하나의resultMap 요소로 표시하는 것이다.그리고 association 요소는 이resultMap 요소를 참조합니다.
<?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="org.zsm.myBatis.day02.inner.IStudentOperation">
<!-- java Bean -->
<resultMap type="Teacher" id="teacherResultMap">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
<result property="gender" column="t_gender"/>
<result property="researchArea" column="research_area"/>
</resultMap>
<resultMap type="Student" id="studentResultMap">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="major" property="major" />
<result column="grade" property="grade"/>
<!-- teacherResultMap -->
<association property="supervisor" resultMap="teacherResultMap"/>
</resultMap>
<!-- SQL "#{}" -->
<select id="getById" parameterType="int" resultMap="studentResultMap">
SELECT st.id,st.name,st.gender,st.major,st.grade,t.id t_id,t.name t_name,
t.gender t_gender,t.research_area
FROM student st, teacher t
WHERE st.supervisor_id = t.id
AND st.id=#{id}
</select>
</mapper>
2. 끼워 넣은 select 문장
이런 방식은 하나의 단독 select 문장을 사용하여 관련 실체를 불러오는 것이다. (이 예는 교사의 실체이다.) 그리고 association 요소에서 이 select 문장을 인용하는 것이다. (주: 이 방법은 N+1 문제가 발생할 수 있으니, 가능한 한 끼워 넣은 select 문장을 사용하지 마라.)
<?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="org.zsm.myBatis.day02.inner.IStudentOperation">
<!-- java Bean -->
<resultMap type="Teacher" id="supervisorResultMap">
<id property="id" column="t_id"/>
<result property="name" column="t_name"/>
<result property="gender" column="t_gender"/>
<result property="researchArea" column="research_area"/>
</resultMap>
<resultMap type="Student" id="studentResultMap">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="major" property="major" />
<result column="grade" property="grade"/>
<!-- teacherResultMap -->
<association property="supervisor" column="supervisor_id" select="selectSupervisor"/>
</resultMap>
<!-- SQL "#{}" -->
<select id="getById" parameterType="int" resultMap="studentResultMap">
select id,name,gender,major,grade,supervisor_id from student where id =#{id}
</select>
<select id="selectSupervisor" parameterType="int" resultMap="supervisorResultMap">
select id,name,gender,research_area
from teacher where id = #{id}
</select>
</mapper>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.