Mybatis 의 association 용법

29961 단어 mybatisassociation
이 글 은 우리 가 앞으로 association 용법 을 좀 배 울 것 이다.
표 구조
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', 'zhangsan', ' ', '        ', '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', 'laowu', ' ', '    ');

대응 하 는 자바 bean
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 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 getSupStudents() { 
  return supStudents; 
 } 
 public void setSupStudents(List supStudents) { 
  this.supStudents = supStudents; 
 } 
}

mapper
 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="net.zaodk.mybatis.mapper.StudentOperationMapper"> 
  
 <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 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> 

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

테스트
public void testAssociation(){ 
  SqlSession session = sqlSessionFactory.openSession(); 
  StudentOperationMapper studentOperationMapper = session.getMapper(StudentOperationMapper.class); 
  Student student = studentOperationMapper.getById(1); 
  System.out.println(student.getName()+"      :"+student.getSupervisor().getName()); 
 }

my Batis association 의 두 가지 형식
끼 워 넣 은 resultMap
이런 방법의 본질은 교사 의 실 체 를 association 요소 에서 추출 하여 resultMap 요소 로 표시 하 는 것 이다.그리고 association 요 소 는 이 resultMap 요 소 를 참조 합 니 다.
 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="net.zaodk.mybatis.mapper.StudentOperationMapper"> 
  
 <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"/> 
   
  <association property="supervisor" resultMap="teacherResultMap"/> 
 resultMap> 

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

포 함 된 selection 문
이러한 방식 은 하나의 단독 selection 문 구 를 사용 하여 관련 된 실 체 를 불 러 오 는 것 입 니 다. (이 예 는 교사 실체 입 니 다) 그리고 association 요소 에서 이 selection 문 구 를 참조 하 는 것 입 니 다. (주: 이 방법 은 N + 1 문제 가 발생 할 수 있 으 므 로 포 함 된 selection 문 구 를 사용 하지 마 십시오)
 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="net.zaodk.mybatis.mapper.StudentOperationMapper"> 
  
 <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"/> 
   
  <association property="supervisor" column="supervisor_id" select="selectSupervisor"/> 
 resultMap> 

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

좋은 웹페이지 즐겨찾기