您的位置:首页 > 其它

Hibernate中的 一对一关联

2016-10-27 11:54 78 查看
Hibernate中的一对一关联

这里以人和身份证为例。

1.创建一个java project

2.添加hibernate常用的jar包和mysql的驱动包

hibernate核心包:

hibernate常用的38个jar包:

MySql驱动包:

3.添加两个配置文件hibernate.cfg.xml和log4j.properties

hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory name="foo">
<property name="hibernate.connection.driver_class">org.gjt.mm.mysql.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/o2odb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">ok</property>
<property name="format_sql">true</property>
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<mapping resource="com/yyz/hibernate/o2o/pojo/User.hbm.xml"/>
<mapping resource="com/yyz/hibernate/o2o/pojo/Card.hbm.xml"/>
</session-factory>
</hibernate-configuration>



log4j.properties

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

log4j.rootLogger=warn, stdout

log4j.logger.org.hibernate=debug

log4j.logger.org.hibernate.type=info

log4j.logger.org.hibernate.tool.hbm2ddl=debug


4.创建实体类User和Card
User.java

package com.yyz.hibernate.o2o.pojo;

public class User {
private String id;
private String uname;
private int age;
private String address;

private Card card;

public User(){
}

public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

public Card getCard() {
return card;
}

public void setCard(Card card) {
this.card = card;
}
}


Card.java

package com.yyz.hibernate.o2o.pojo;

public class Card {
private String cid;
private String cardNo;

private User user;

public Card(){
}

public String getCid() {
return cid;
}

public void setCid(String cid) {
this.cid = cid;
}

public String getCardNo() {
return cardNo;
}

public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

}


5.配置映射文件

User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.yyz.hibernate.o2o.pojo">
<class name="User" table="t_user">
<id name="id" column="id">
<generator class="uuid"/>
</id>
<property name="uname"/>
<property name="age"/>
<property name="address"/>

<one-to-one name="card" cascade="save-update"/>
</class>
</hibernate-mapping>


注意:cascade="save-update"表示当保存或者修改user的时候,级联的保存和它相关的card也保存或修改

Card.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.yyz.hibernate.o2o.pojo">
<class name="Card" table="t_card">

<id name="cid" column="cid">
<generator class="foreign">
<param name="property">user</param>
</generator>
</id>
<property name="cardNo"/>

<one-to-one name="user" constrained="true" />
</class>
</hibernate-mapping>


6.创建util工具类(创建表)

CreateTable.java

package com.yyz.hibernate.util;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

public class CreateTable {
public static void main(String[] args){
Configuration cfg = new Configuration().configure();
SchemaExport se = new SchemaExport(cfg);
se.create(true, true);
}
}


首先,在数据库中新建一个数据库“o2odb”,名称与hibernate.cfg.xml文件中数据库名称相同。
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/o2odb</property>


然后,运行CreateTable.java

自动生成了两张表:

7.创建测试类TestO2O.java

首先,加测试用的jar包

选中工程,右键-->Build Path -->Add Libraries...  -- >选择JUnit  ---> 点击Finish --- >添加成功

TestO2O.java


package com.yyz.hibernate.o2o.test;

import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

import com.yyz.hibernate.o2o.pojo.Card;
import com.yyz.hibernate.o2o.pojo.User;

public class TestO2O extends TestCase {

private Session session ;

@Override
protected void setUp() throws Exception {
System.out.println("开始测试....");
Configuration cfg = new Configuration().configure();
SessionFactory factory = cfg.buildSessionFactory();
session = factory.openSession();
}

public void test01(){
User user = new User("kobe",35,"洛杉矶");
Card card = new Card("321201199349193499");
user.setCard(card);
card.setUser(user);
session.save(user);

}
@Override
protected void tearDown() throws Exception {
System.out.println("测试结束.....");
session.beginTransaction().commit();
}

}


运行结果:

查看数据库中的数据:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息