1. 일대일 협회
1.1. 요구 사항을 제안합니다
클래스 ID (교사와의 정보)를 기반으로 한 쿼리 클래스 정보
1.2. 테이블과 데이터를 만듭니다
교사 테이블과 수업 테이블을 만듭니다. 여기서 우리는 교사가 한 수업을 가르 칠 책임이 있다고 가정하므로 교사와 수업의 관계는 일대일 관계입니다.
테이블 교사 생성 (T_ID int 기본 키 AUTO_INCREMENT, T_NAME VARCHAR ()); 테이블 클래스 생성 (C_ID int 기본 키 AUTO_INCREMENT, C_NAME VARCHAR (), 교사 _ID int); ALTER TABLE CLASS ADD 제약 조건 FK_TECHER_ID 외국 키 (Teacher_id) 참조 교사 (T_ID); 교사 (t_name) 값 ( '교사')에 삽입; 교사 (t_name) 값 ( '교사')에 삽입; 클래스에 삽입 (c_name, teacher_id) 값 ( 'class_a',); 클래스에 삽입 (c_name, teacher_id) 값 ( 'class_b', 2);
테이블 간의 관계는 다음과 같습니다.
1.3. 엔티티 클래스를 정의합니다
1. 교사 수업, 교사 수업은 교사 테이블에 해당하는 엔티티 수업입니다.
저를 포장합니다 .gacl.domain; /*** @author gacl* 교사 테이블에 해당하는 엔티티 클래스 정의*/공개 수업 교사 {// 교사 테이블 개인 int id의 필드에 해당하는 엔티티 클래스의 속성을 정의합니다. // id ===> T_ID 개인 문자열 이름; // name ===> t_name public int getId () {return id; } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } @override public String toString () {return "교사 [id =" + id + ", name =" + name + "]; }}2. 클래스 클래스, 클래스 클래스는 클래스 테이블에 해당하는 엔티티 클래스입니다.
저를 포장합니다 .gacl.domain; /*** @author gacl* 클래스 테이블에 해당하는 엔티티 클래스 정의*/public class classment {// 클래스 테이블 개인 int id의 필드에 해당하는 엔티티 클래스의 속성을 정의합니다. // id ===> C_ID 개인 문자열 이름; // name ===> c_name /** * 클래스 테이블에 Teacher_ID 필드가 있으므로 교사 속성은 클래스 클래스에 정의되며 *는 교사와 수업 간의 일대일 관계를 유지하는 데 사용됩니다. 이 교사 속성을 통해이 수업을 담당하는 교사가 어떤 교사*/ 개인 교사 교사를 알 수 있습니다. public int getid () {return id; } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } 공개 교사 getTeacher () {반환 교사; } public void setteacher (교사 교사) {this.teacher = 교사; } @override public String toString () {return "classe [id =" + id + ", name =" + name + ", 교사 =" + 교사 + "]; }} 1.4. SQL 매핑 파일 classmapper.xml을 정의하십시오
<? xml 버전 = "." 인코딩 = "utf-"?> <! doctype mapper public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis-mapper.dtd"> <!-이 Mapper를위한 고유 한 이름 공간을 지정하십시오. 네임 스페이스의 값은 일반적으로 패키지 이름 + SQL 매핑 파일 이름으로 설정되어 네임 스페이스의 값이 고유 한 것으로 보장 될 수 있습니다. 예를 들어, namespace = "me.gacl.mapping.classmapper"는 me.gacl.mapping (패키지 이름) + classmapper (classmapper.xml 파일 제거 접미사)-> <mapper 네임 스페이스 = "me.gacl.mapping.classmapper">-교사 정보를 기반으로 쿼리 클래스 정보를 기반으로합니다. 공동 테이블 쿼리 선택 * 클래스 C, 교사 T에서 C.teacher_id = t.t_id 및 c.c_id =; ##. 두 개의 쿼리를 실행합니다. select * from where c_id =; // teacher_id = select * select * select * select * select * select * select where t_id =; // 위에서 얻은 교사 _id를 사용합니다-> <!-메소드 1 : 중첩 결과 맵을 사용하여 중복 공동 쿼리의 하위 집합을 사용하여 공동 테이블 쿼리의 데이터를 캡슐화하기 위해 (중복 데이터 제거) 클래스 C에서 * teacher_id = t.t_id 및 c.c_id = "" "getclass" "select * select * select * select * select. resultMap="ClassResultMap"> select * from class c, teacher t where c.teacher_id=t.t_id and c.c_id=#{id} </select> <!-- Use resultMap to map the one-to-one correspondence between entity classes and fields--> <resultMap type="me.gacl.domain.Classes" id="ClassResultMap"> <id property="id" column = "c_id"/> <result property = "name"column = "c_name"/> <Association Property = "교사"Javatype = "me.gacl.domain.teacher"> <id property = "id"column = "t_id"/> <result property = "name" "column ="t_name "/> </resultmap> <! <! SQL 매핑 명령문 선택 *에서 c_id =; 선생님의 선택 *에서 t_id = //는 이전 쿼리에서 얻은 교사의 값입니다-> <select id = "getclass"parametertype = "int"resultmap = "classresultMap"> select *에서 c_id =#{id} </select> <!-ehinditity class 사이의 일대일에 해당하는 결과를 사용하십시오. type = "me.gacl.domain.classes"id = "classResultMap"> <id property = "id"column = "c_id"/> <결과 속성 = "name"column = "c_name"/> <acioction property = "el resulttype = "me.gacl.domain.teacher"> t_id id, t_name 이름을 선택하여 t_id =#{id} </select> </mapper> conf.xml 파일에서 classmapper.xml을 등록하십시오
<mappers> <!- classmapper.xml 파일을 등록하십시오. classmapper.xml은 패키지 me.gacl.mapping에 위치하고 있으므로 리소스는 me/gacl/mapping/classmapper.xml-> <mapper resource = "me/gacl/mapping/classmapper.xml"/> </mappers>로 작성되었습니다.
1.5. 단위 테스트 코드를 작성하십시오
Me.gacl.test; Me.gacl.domain.classes를 가져옵니다. import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlsession; import org.junit.test; 공개 클래스 테스트 {@test public void testgetClass () {sqlsession sqlsession = mybatisutil.getSqlsession (); /** * MAP SQL 식별 문자열, * me.gacl.mapping.classMapper는 classMapper.xml 파일에서 Mapper 태그의 네임 스페이스 속성 값입니다. * GetClass는 선택 태그의 ID 속성 값입니다. 실행될 SQL은 선택 태그 */String statement의 ID 속성 값을 통해 찾을 수 있습니다./string state = "me.gacl.mapping.classmapper.getClass"; // SQL의 식별 문자열 매핑 // 쿼리 작업을 실행하고 클래스 클래스 클래스 및 반환 결과를 자동으로 캡슐화하여 클래스 테이블 = SQLSESSION (state/query); sqlsession sqlsession.close ()를 사용한 SQL; System.out.println (Clazz); // 인쇄 결과 : 클래스 [id =, name = class_a, 교사 [id =, name = 교사]]} @test public void testgetclass () {sqlsession sqlsession = mybatisutil.getSqlsession (); /** * MAP SQL 식별 문자열, * me.gacl.mapping.classMapper는 classMapper.xml 파일에서 Mapper 태그의 네임 스페이스 속성 값입니다. * GetClass는 선택 태그의 ID 속성 값입니다. 실행될 SQL은 선택 태그 */String 문의 ID 속성 값을 통해 찾을 수 있습니다./string 문 = "me.gacl.mapping.classmapper.getClass"; // SQL의 식별 문자열 맵핑 // 쿼리 작업을 실행하고 클래스 리턴 클래스 Clazz = SQLSESSES.SelectOne (문서); sqlsession sql을 실행하려면 sqlsession sqlsession.close ()를 닫아야합니다. System.out.println (Clazz); // 인쇄 결과 : 클래스 [id =, name = class_a, 교사 [id =, name = 교사]}} 1.6. Mybatis 일대일 협회 쿼리 요약
Mybatis는 협회 태그를 사용하여 일대일 협회 쿼리를 해결합니다. 협회 태그에 사용 가능한 속성은 다음과 같습니다.
• 속성 : 객체 속성의 이름
• Javatype : 객체 속성 유형
• 열 : 해당 외국 키 필드 이름
• 선택 : 다른 쿼리를 사용하여 결과를 캡슐화하십시오
2. 일대일 협회
2.1. 요구 사항을 제안합니다
학생 및 교사를 포함하여 ClassID에 따라 해당 클래스 정보를 쿼리하십시오.
2.2. 테이블과 데이터를 만듭니다
위의 일대일 상관 쿼리 데모에서 우리는 수업 테이블과 교사 테이블을 만들었으므로 다른 학생 테이블을 만듭니다.
테이블 학생 (S_ID int 1 차 키 auto_increment, s_name varchar (20), class_id int); 학생 (s_name, class_id) 값 ( '학생 _a', 1); 학생에 삽입 (s_name, class_id) 값 ( 'Student_b', 1); Student (student_name, class_id) values (student_name, 1); class_id) 값 ( 'Student_d', 2); Student (s_name, class_id) 값 ( 'Student_e', 2)에 삽입; Student (s_name, class_id) 값 ( 'Student_f', 2);
2.3. 엔티티 클래스를 정의합니다
1. 학생 수업
저를 포장합니다 .gacl.domain; /*** @author gacl* 학생 테이블에 해당하는 엔티티 클래스 정의*/공개 클래스 학생 {// 학생 테이블 개인 int id의 필드에 해당하는 속성을 정의합니다. // id ===> S_ID 개인 문자열 이름; // name ===> s_name public int getId () {return id; } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } @override public String toString () {return "repody [id =" + id + ", name =" + name + "]; }} 2. 수업 수정 수정, 목록 <tudent> 학생 속성을 추가하고 목록 <스튜던트 컬렉션 속성을 사용하여 다음과 같이 수업이 소유 한 학생을 대표합니다.
저를 포장합니다 .gacl.domain; Java.util.list 가져 오기; /*** @author gacl* 클래스 테이블에 해당하는 엔티티 클래스 정의*/public class classment {// 클래스 테이블 개인 int id의 필드에 해당하는 엔티티 클래스의 속성을 정의합니다. // id ===> C_ID 개인 문자열 이름; // name ===> c_name /** * 클래스 테이블에 Teacher_ID 필드가 있으므로 교사 속성은 클래스 클래스에 정의되며 *는 교사와 수업 간의 일대일 관계를 유지하는 데 사용됩니다. 이 교사 속성을 통해이 수업을 담당하는 교사가 어떤 교사*/ 개인 교사 교사를 알 수 있습니다. // 목록 <스튜던트 컬렉션 속성을 사용하여 수업 개인 목록 <Tudling> 학생이 소유 한 학생을 대표합니다. public int getid () {return id; } public void setid (int id) {this.id = id; } public String getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } 공개 교사 getTeacher () {반환 교사; } public void setteacher (교사 교사) {this.teacher = 교사; } public void setteacher (교사 교사) {this.teacher = 교사; } public list <tudent> getStudents () {반품 학생; } public void setStudents (list <tudent> 학생) {this.students = 학생; } @override public String toString () {return "classe [id =" + id + ", name =" + name + ", 교사 =" + 교사 + ", 학생 =" + whitsing + "]; }} 2.4. SQL 매핑 파일 classmapper.xml을 수정하십시오
다음 SQL 매핑 정보를 추가하십시오
<!-학생 및 교사를 포함하여 ClassID에 따라 해당 클래스 정보를 쿼리합니다 .-> <!-메소드 1 : 중첩 결과 : 중첩 결과 맵을 사용하여 반복 된 공동 결과 맵을 사용하여 클래스 C, 교사 T, 학생 S, C.c_id = s.class_id 및 c.c_id =-> <get Class ""get Class ""get Class "" " resultMap="ClassResultMap"> select * from class c, teacher t,student s where c.teacher_id=t.t_id and c.C_id=s.class_id and c.c_id=#{id} </select> <resultMap type="me.gacl.domain.Classes" id="ClassResultMap"> <id property="id" column="c_id"/> <result property="name" column = "c_id"/> <result property = "name"column = "c_name"/> <Association 속성 = "교사"열 = "교사 _id"javatype = "me.gacl.domain.teacher"> <id "열 ="t_id "/> <result property ="name ""column = "t_name"/ancization> <! <! 속성 = "학생"oftype = "me.gacl.domain.student"> <id property = "id"column = "s_id"/<result property = "name"column = "s_name"/> </collection> </resultmap> <!- 메소드 : 다른 sql 맵핑 문을 실행하여 예상되는 복잡한 유형을 반환합니다. 선생님의 선택 *에서 t_id = //는 이전 쿼리에서 얻은 교사의 값입니다. type = "me.gacl.domain.classes"id = "classresultMap"> <id property = "id"column = "c_id"/> <결과 속성 = "name"column = "c_name"/> <acioction property = "teacher"column = "teacher_id"javatype = "me.gacle.domain.teacher"select = "getteacher"> oftype = "me.gacl.domain.student"column = "c_id"select = "getstudent"> </collection> </resultmap> <select id = "getTeacher"parametertype = "int"resulttype = "me.gacl.domain.teacher"> Tecoling에서 t_id = {id}}## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ id = "getStudent"parametertype = "int"resulttype = "me.gacl.domain.student"> select s_id id, s_name name where where that _id =#{id} </select> 2.5. 단위 테스트 코드를 작성하십시오
Me.gacl.test; Me.gacl.domain.classes를 가져옵니다. import me.gacl.util.mybatisutil; import org.apache.ibatis.session.sqlsession; import org.junit.test; 공개 클래스 테스트 {@test public void testgetClass () {sqlsession sqlsession = mybatisutil.getSqlsession (); /** * MAP SQL 식별 문자열, * me.gacl.mapping.classMapper는 classMapper.xml 파일에서 Mapper 태그의 네임 스페이스 속성 값입니다. * getClass는 선택 태그의 ID 속성 값입니다. 실행될 SQL은 선택 태그 */String statement의 ID 속성 값을 통해 찾을 수 있습니다./string state = "me.gacl.mapping.classmapper.getClass"; // SQL의 식별 문자열 매핑 // 쿼리 작업을 실행하고 클래스 클래스 클래스 및 반환 결과를 자동으로 캡슐화하여 클래스 테이블 = SQLSESSION (state/query); sqlsession sqlsession.close ()를 사용한 SQL; // 결과 인쇄 : 클래스 [id =, name = class_a, 교사 = 교사 [id =, name = 교사], 학생 = [학생 [id =, name = student_a], 학생 [id =, name = student_b], 학생 [id =, name = student_c]] system.out.println (Clazz); } @test public void testgetClass () {sqlsession sqlsession = mybatisutil.getSqlsession (); /** * MAP SQL 식별 문자열, * me.gacl.mapping.classMapper는 classMapper.xml 파일에서 Mapper 태그의 네임 스페이스 속성 값입니다. * getClass는 선택 태그의 ID 속성 값입니다. 실행될 SQL은 선택 태그 */String statement의 ID 속성 값을 통해 찾을 수 있습니다./string state = "me.gacl.mapping.classmapper.getClass"; // SQL의 식별 문자열 매핑 // 쿼리 작업을 실행하고 클래스 클래스 클래스 및 반환 결과를 자동으로 캡슐화하여 클래스 테이블 = SQLSESSION (state/query); sqlsession sqlsession.close ()를 사용한 SQL; // 결과 인쇄 : 클래스 [id =, name = class_a, 교사 = 교사 [id =, name = 교사], 학생 = [학생 [id =, name = student_a], 학생 [id =, name = student_b], 학생 [id =, name = student_c]] system.out.println (Clazz); }} 2.6. mybatis 일대일 협회 쿼리 요약
MyBatis는 컬렉션 태그를 사용하여 일대일 연관성 쿼리를 해결하고 OfType 속성은 컬렉션의 객체 유형의 요소를 지정합니다.
Mybatis Learning Tutorial (v) - 협회 테이블 쿼리 구현에 대해 여러분에게 많은 소개를하겠습니다. 도움이되기를 바랍니다.