hibernate系列十一:一对一关联配置及案例

人和身份证是典型的一对一关系

============sql脚本====================

--身份证表
CREATE TABLE Card
(
  cardId CHAR(18) PRIMARY KEY,
  cardName VARCHAR(50) NOT NULL DEFAULT '中华人民共和国居民身份证',
  signOffice VARCHAR(50) NOT NULL,
  startDate DATE,
  endDate DATE
);
INSERT INTO Card VALUES('432569851458019850',DEFAULT,'长沙市公安局岳麓分局','2007-10-08','2018-10-08');
INSERT INTO Card VALUES('411525698574232985',DEFAULT,'长沙市公安局望城分局','2006-10-08','2020-10-26');
INSERT INTO Card VALUES('400698532578456233',DEFAULT,'长沙市公安局星沙分局','2005-10-08','2017-10-25');
INSERT INTO Card VALUES('254875154963225583',DEFAULT,'长沙市公安局开福区分局','2004-10-08','2016-10-16');
INSERT INTO Card VALUES('365847125652355489',DEFAULT,'长沙市公安局雨花区分局','2003-10-08','2015-10-09');
--公民信息表
CREATE TABLE Person
(
  perId INT PRIMARY KEY AUTO_INCREMENT,
  perName VARCHAR(20) NOT NULL,
  gender CHAR(2) NOT NULL,
  nation VARCHAR(20),
  birthDay DATE,
  address VARCHAR(50),
  cardNo CHAR(18),
  FOREIGN KEY(cardNo) REFERENCES Card(cardId)
);
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('麻子','男','汉族','1982-04-03','obtk学生宿舍','432569851458019850');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('liudehua','男','傣族','1981-08-08','obtk学生宿舍','411525698574232985');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('周星星','男','瑶族','1976-11-11','obtk学生宿舍','400698532578456233');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('冰冰棒','女','苗族','1985-09-11','obtk学生宿舍','254875154963225583');
INSERT INTO Person(perName,gender,nation,birthDay,address,cardNo) VALUES('刘怡菲','女','侗族','1986-05-04','obtk学生宿舍','365847125652355489');

==============实体类CardEntity.java========================

package com.obtk.entitys;

import java.io.Serializable;

public class CardEntity implements Serializable {
	private String cardId;
	private String  cardName;
	private String signOffice;
	private String startDate;
	private String endDate;
	private PersonEntity per;//关联属性
	
	
	public CardEntity() {
	}

	
	public CardEntity(String cardId, String cardName, String signOffice,
			String startDate, String endDate) {
		super();
		this.cardId = cardId;
		this.cardName = cardName;
		this.signOffice = signOffice;
		this.startDate = startDate;
		this.endDate = endDate;
	}


	public void setPer(PersonEntity per) {
		this.per = per;
	}
	
	public PersonEntity getPer() {
		return per;
	}
	
	public String getCardId() {
		return cardId;
	}
	public void setCardId(String cardId) {
		this.cardId = cardId;
	}
	public String getCardName() {
		return cardName;
	}
	public void setCardName(String cardName) {
		this.cardName = cardName;
	}
	public String getSignOffice() {
		return signOffice;
	}
	public void setSignOffice(String signOffice) {
		this.signOffice = signOffice;
	}
	public String getStartDate() {
		return startDate;
	}
	public void setStartDate(String startDate) {
		this.startDate = startDate;
	}
	public String getEndDate() {
		return endDate;
	}
	public void setEndDate(String endDate) {
		this.endDate = endDate;
	}
	
	
}

==============实体类PersonEntity.java========================

package com.obtk.entitys;

import java.io.Serializable;

public class PersonEntity implements Serializable{
	private static final long serialVersionUID = -9133691278588045990L;
	
	private int perId;
	private String perName;
	private String gender;
	private String nation;
	private String birthDay;
	private String address;
	private CardEntity card;  //关联属性
	
	public PersonEntity() {
	}
	
	
	public PersonEntity(String perName, String gender, String nation,
			String birthDay, String address) {
		super();
		this.perName = perName;
		this.gender = gender;
		this.nation = nation;
		this.birthDay = birthDay;
		this.address = address;
	}


	public void setCard(CardEntity card) {
		this.card = card;
	}
	
	public CardEntity getCard() {
		return card;
	}
	
	
	public int getPerId() {
		return perId;
	}
	public void setPerId(int perId) {
		this.perId = perId;
	}
	public String getPerName() {
		return perName;
	}
	public void setPerName(String perName) {
		this.perName = perName;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;
	}
	public String getNation() {
		return nation;
	}
	public void setNation(String nation) {
		this.nation = nation;
	}
	public String getBirthDay() {
		return birthDay;
	}
	public void setBirthDay(String birthDay) {
		this.birthDay = birthDay;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	
}

=======================映射文件PersonEntity.hbm.xml==================

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.obtk.entitys.PersonEntity" table="Person">
		<id name="perId" type="integer">
		    <column name="perId"></column>
			<generator class="native"></generator>
		</id>
		<property name="perName" type="string">
			<column name="perName"></column>
		</property>
		<property name="gender" type="string">
			<column name="gender"></column>
		</property>
		<property name="nation" type="string">
			<column name="nation"></column>
		</property>
		<property name="address" type="string">
			<column name="address"></column>
		</property>
		<property name="birthDay" type="string">
			<column name="birthDay"></column>
		</property>
		<!—column是外键,unique是唯一,cascade是级联属性—->
<many-to-one name="card" class="com.obtk.entitys.CardEntity"
		   column="cardNo"
		   unique="true"
		   cascade="all">
		</many-to-one>
	</class>
</hibernate-mapping>

==================映射文件CardEntity.hbm.xml===============

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.obtk.entitys.CardEntity" table="Card">
		<id name="cardId" type="string">
		    <column name="cardId"></column>
			<generator class="assigned"></generator>
		</id>
		<property name="cardName" type="string">
			<column name="cardName"></column>
		</property>
		<property name="startDate" type="string">
			<column name="startDate"></column>
		</property>
		<property name="endDate" type="string">
			<column name="endDate"></column>
		</property>
		<property name="signOffice" type="string">
			<column name="signOffice"></column>
		</property>
		<!-- property-ref="card"表示外键表的关联属性 -->
		<one-to-one name="per" class="com.obtk.entitys.PersonEntity"
		   property-ref="card"
		   cascade="all"
		  ></one-to-one>
	</class>
</hibernate-mapping>

案例一  数据添加

package com.obtk.test;


import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.obtk.entitys.CardEntity;
import com.obtk.entitys.PersonEntity;
import com.obtk.utils.HibernateUtil;

public class TestAdd {
	public static void main(String[] args) {
		Session session=null;
		Transaction tx=null;
		try {
			//获得数据库链接
			session=HibernateUtil.getSession();
			tx=session.beginTransaction();
			CardEntity card=new CardEntity("254586995425635415", "中华人民共和国居民身份证", 
					      "长沙市望城区哦不塔克分局", "2010-11-11", "2030-11-11");
			PersonEntity per=new PersonEntity("小明", "男", "布依族", "2002-11-11", "学生宿舍");
			card.setPer(per);
			per.setCard(card);
			session.save(per);
			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			tx.rollback();
		}finally{
			HibernateUtil.closeSession();
		}
	}
}

案例二  数据删除

package com.obtk.test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.obtk.entitys.CardEntity;
import com.obtk.utils.HibernateUtil;

public class TestDel {
	public static void main(String[] args) {
		Session session=null;
		Transaction tx=null;
		try {
			//获得数据库链接
			session=HibernateUtil.getSession();
			tx=session.beginTransaction();
			CardEntity card=(CardEntity)session.get(CardEntity.class, "254586995425635415");
			session.delete(card);
			tx.commit();
		} catch (HibernateException e) {
			e.printStackTrace();
			tx.rollback();
		}finally{
			HibernateUtil.closeSession();
		}
	}
}

案例三  关联查询

package com.obtk.test;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import com.obtk.entitys.PersonEntity;
import com.obtk.utils.HibernateUtil;

public class TestJoin01 {
	public static void main(String[] args) {
		Session session=null;
		try {
			//获得数据库链接
			session=HibernateUtil.getSession();
			PersonEntity per=(PersonEntity)session.get(PersonEntity.class, 7);
			System.out.println(per.getPerName()+","+per.getGender()
					+","+per.getCard().getCardId()+","+per.getCard().getSignOffice());
		} catch (HibernateException e) {
			e.printStackTrace();
		}finally{
			HibernateUtil.closeSession();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/wx5040257/article/details/78678549