1. 조합 매핑
조합은 특별한 연관 관계의 특별한 경우이며 최고 수준의 커플 링과의 관계입니다. 조합의 주요 객체와 하위 객체는 동일한 수명주기를 갖습니다. 기본 객체가 죽으면 하위 객체도 죽습니다. 여기서 우리는 고용주와 사용자를 예로 사용합니다. 사용자와 고용주 모두 연락처 정보 속성이 있습니다. 객체의 관점에서 생각되면 종종 객체 모델을 조합 메소드로 그려 공통 연락처 정보 클래스를 추상화합니다. 그런 다음 두 사람은 해당 연락처 정보 개체를 포함합니다. 해당 객체 모델에 직면 할 때 객체 예제는 다음 그림에 나와 있습니다.
결합 된 객체 모델이 해당 관계 모델을 생성 한 후에는 해당 서브 클래스가 주 테이블에 포함되므로 해당 테이블 구조는 해당 테이블에 해당 속성을 생성합니다. 해당 테이블 구조는 다음과 같습니다.
1.1 직원 클래스 및 매핑 파일
객체 모델에는 직원과 접촉 사이에 포함 관계가 있습니다. 코드를 작성할 때는 직원에 연락처 객체를 포함시켜야합니다. 해당 매핑 파일에는 연락처 객체의 매핑이 필요합니다. 결합 된 객체를 나타내고 개체 속성을 객체 태그에 추가하기 위해 <component> 태그를 사용해야합니다.
목록 : Employee.java. 기본 속성 외에도 클래스 파일은 접촉 객체와 함께 포장되어야합니다.
패키지 com.src.hibernate; 공개 클래스 직원 {// id 번호 개인 int id; public int getid () {return id; } public void setid (int id) {this.id = id; } // 이름 개인 문자열 이름; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } // 연락처 객체 개인 연락처 USERCONTACT; 공개 연락처 getUserContAct () {return USERCONTACT; } public void setUserContact (USERCONTACT에 문의) {this.USERCONTACT = USERCONTACT; }}Listing 2 : Employee.hbm.xml, 해당 매핑 파일을 추가하십시오. 매핑 된 조합 객체에는 <component>가 표시되고 해당 객체 속성을 태그에 추가해야합니다. 특정 코드는 다음과 같습니다.
<? XML 버전 = "1.0"?> <! DocType Hibernate Mapping Public "-// hibernate/hibernate 매핑 DTD 3.0 // 테이블 = "t_employee"> <id name = "id"> <generator/> </id> <property name = "name"/> <component name = "EmployeeContact"> <property name = "email"/<property name = "address"/> <속성 이름 = "ZipCode"/> <property name = "contacttel"/> </class>
1.2 사용자 클래스 및 구성 파일
목록 3 : user.java, 해당 콘텐츠 구조는 Employee.java의 콘텐츠 구조와 동일합니다. 나는 다른 사람들에 대해 많이 말하지 않고 코드를보십시오.
패키지 com.src.hibernate; 공개 클래스 사용자 {// id 번호 개인 int id; public int getid () {return id; } public void setid (int id) {this.id = id; } // 이름 개인 문자열 이름; 공개 문자열 getName () {return name; } public void setName (문자열 이름) {this.name = 이름; } // 연락처 객체 개인 연락처 USERCONTACT; 공개 연락처 getUserContAct () {return USERCONTACT; } public void setUserContact (USERCONTACT에 문의) {this.USERCONTACT = USERCONTACT; }}목록 4 : user.hbm.xml, 해당 콘텐츠 구조는 Employee.hbm.xml의 콘텐츠 구조와 동일하며 주로 <component> 태그 사용에 사용됩니다. 매우 간단하며 코드는 다음과 같습니다.
<? XML 버전 = "1.0"?> <! DocType Hibernate Mapping Public "-// hibernate/hibernate 매핑 dtd 3.0 // 테이블 = "t_user"> <id name = "id"> <generator/generator/> </id> <속성> <속성 이름 = "name"/> <component name = "usercontact"> <property name = "email"/> <property name = "address"/> <속성 이름 = "ZipCode"/> <properttel "/> </component> </class>
1.3 연락처 Java 클래스
이 클래스 파일에서주의를 기울일 것이 없습니다. 기본 속성을 추가 할 수 있으며이 클래스에 해당 매핑을 구성 할 필요가 없으므로 콘텐츠가 매우 간단합니다.
패키지 com.src.hibernate; 공개 수업 연락처 {// 이메일 주소 개인 문자열 이메일; 공개 문자열 getEmail () {반환 이메일; } public void seteMail (문자열 이메일) {this.email = 이메일; } // 주소 개인 문자열 주소; 공개 문자열 getAddress () {반환 주소; } public void setAddress (문자열 주소) {this.address = 주소; } // 포스트 코드 개인 문자열 zipcode; public String getzipCode () {return zipcode; } public void setzipcode (String Zipcode) {this.zipcode = zipcode; } // Contact Number Private String Contacttel; 공개 문자열 getContActTel () {return ContactTel; } public void setContActTel (String Contacttel) {this.contActTel = ContactTel; }} 1.4 결과를 생성하십시오
위의 파일 구성 후에 해당 데이터베이스 테이블 구조를 생성 할 수 있습니다. 생성 된 SQL 문은 다음과 같습니다.
드롭 테이블이 존재하는 경우 t_employee 드롭 테이블이 존재하는 경우 t_employee drop table tably tabloinee (id integer auto_increment, varchar (255), email varchar (255), 주소 varchar (255), zipcode varchar (255), contacttel varchar (255), 1 차 키 (Id)) (id integer not null auto_increment, null integer). Varchar (255), 이메일 Varchar (255), 주소 Varchar (255), Zipcode Varchar (255), Contacttel Varchar (255), 1 차 키 (ID))
생성 된 데이터베이스 테이블 구조는 다음과 같습니다.
2. 데이터 작동
매핑을 결합하여 얻은 테이블 구조는 완전한 테이블이므로 데이터를 작성하고 읽을 때 가장 독창적 인 방법을 구현할 수 있습니다. 여기서 우리는 또한 이전 기사에서 사용 된 테스트 방법을 사용하여 데이터를 작성하고 읽는 데이터를 사용합니다.이 데이터는 저장 및로드 방법을 사용하는 데이터를 사용합니다. 특정 작업은 아래를 참조하십시오.
2.1 데이터 삽입
여기서 사용자는 예로 사용되며 직원의 쓰기 작업은 사용자의 쓰기 작업과 동일합니다. 데이터를 작성할 때는 두 개의 객체를 만들어야합니다. 하나는 연락처 객체이고 다른 하나는 사용자 객체입니다. 저장할 때는 사용자 객체 만 저장해야하며 해당 연락처 객체가 함께 저장됩니다.
public void testsave1 () {// 세션 객체 세션 세션 = null; {// 세션 객체 세션을 얻습니다. hibernateutils.getSession (); // 세션 세션을 엽니 다. beginTransaction (); // 연결 객체 생성 연락처 USERCONTACT = new Contact (); usercontact.setAddress ( "베이징"); usercontact.setContActTel ( "1243435"); usercontact.seteMail ( "[email protected]"); usercontact.setzipcode ( "zipcode"); // 사용자 객체 사용자 user = new user (); user.setName ( "Zhangsan"); user.setusercontact (usercontact); 세션 .SAVE (사용자); // 세션 제출 세션 .getTransaction (). commit (); } catch (예외 e) {e.printstacktrace (); session.getTransaction (). Rollback (); } 마침내 {hibernateutils.closesession (세션); }} 생성 된 SQL 문 :
t_user에 삽입 (이름, 이메일, 주소, 우편 번호, Contacttel) 값 (?,?,?,?,?)
다음과 같이 테이블 구조를 확인하십시오.
2.2 작업 읽기
또한 사용자를 예로 사용하면 직원의 운영은 사용자 개체와 동일합니다. 읽기 작업은 매우 간단합니다. 코드는 다음과 같습니다.
public void testload1 () {// 세션 객체 세션 세션 = null을 선언합니다. {// 세션 객체 세션을 얻습니다. hibernateutils.getSession (); // 세션 세션을 엽니 다. beginTransaction (); // 사용자 객체 사용자 user = (user) session.load (user.class, 1); System.out.println ( "사용자 이름 :"+user.getName ()); // 세션을 제출합니다. getTransaction (). commit (); } catch (예외 e) {e.printstacktrace (); session.getTransaction (). Rollback (); } 마침내 {hibernateutils.closesession (세션); }}해당 결과는 다음과 같이 생성됩니다.
Hibernate : user0_.id, id0_0_, user0_.name as name0_0_, user0_.email as email0_0_, user0_.aaddress as jands0_0_, zipcode0_0_, zipcode0_0_, user0_.contactel as t_users user0_에서 user0_.contactel에서 선택하십시오. 사용자 이름 : Zhangsan
III. 포괄적 인 예
계정:
공개 클래스 계정은 직렬화 가능한 {private int id; 개인 이중 돈; 개인 주소 주소; public int getid () {return id; } public void setid (int id) {this.id = id; } public double getmoney () {return money; } public void setMoney (Double Money) {this.money = Money; } 공개 주소 getAdDress () {반환 주소; } public void setAddress (주소 주소) {this.address = 주소; }} 주소:
공개 클래스 주소는 직렬화 가능한 {개인 문자열 코드를 구현합니다. 개인 문자열 도시; 개인 문자열 주; public String getCode () {return code; } public void setCode (문자열 코드) {this.code = code; } public String getCity () {return City; } public void setcity (String City) {this.city = City; } public String getProvince () {return province; } public void setprovince (String Province) {this.province = 지방; }} 계정 .hbm.xml :
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype hibernate 맵핑 공개 "-// hibernate/hibernate 매핑 dtd 3.0 // en" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <! 도구-> <hibernate-mapping package = "pojo"> <class name = "ac 이름 = "Code"> </colum> </property> <속성 이름 = "City"> <Column Name = "City"> </column> </property> <Property name = "province"> <column name = "province"> </column> </property> </component> </class> </hibernate-mapping>