Hibernate框架进阶(二)

Hibernate的关系映射

Hibernate关系映射就是将关系数据库中表的数据映射为java中的对象,以实现对数据的操作。

1.多对一关系映射

本例实现多个Product对应一个Category关系映射

创建Category实体

package pojo;

public class Category {

	private int id;
	private String name;

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


}

在同一个包中配置Category.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">
<!-- Generated 2018-5-30 17:48:28 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="pojo.Category" table="CATEGORY">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
    </class>
</hibernate-mapping>

在Product类增加Category属性

    private Category category;
    public Category getCategory() {
        return category;
    }
    public void setCategory(Category category) {
        this.category = category;
    }

在Product.hbm.xml设置对Category的多对一映射

<many-to-one name="category" class="pojo.Category" column="cid"></many-to-one>

column="cid"表示指向Category表的外键

在hibernate.cfg.xml中添加Category的映射

<mapping resource="pojo/Category.hbm.xml" />

在主类中测试many-to-one关系

		// 多对一关系映射
		Category category1 = new Category();
		category1.setName("c1");
		session.save(category1);

		Product product5 = (Product) session.get(Product.class, 0);
		product5.setCategory(category1);
		session.update(product5);

2.一对多关系映射

本例实现一个Category对应多个Product关系映射

为Category类增加一个Set集合

    private Set<Product> products;
    public Set<Product> getProducts() {
        return products;
    }
    public void setProducts(Set<Product> products) {
        this.products = products;
    }

在Category.hbm.xml增加one-to-many映射

        <set name="products" lazy="false">
        <key><column name="cid" not-null="false"></column></key>
        <one-to-many class="pojo.Product"/>
        </set>

lazy="false"表示不使用延迟加载,关于延迟加载后面章节会讲解

在主类中测试one-to-many关系

		// 一对多关系映射
		Category category2 = (Category) session.get(Category.class, 0);
		Set<Product> products2 = category2.getProducts();
		for (Product product : products2) {
			System.out.println(product.getName());
		}

3.多对多关系映射

本例实现多个Product对应多个User关系映射

要实现多对多关系映射,需要一张中间表,在本例中为user_product

创建User实体

package pojo;

import java.util.Set;

public class User {

	private int id;
	private String name;
	private Set<Product> products;

	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 Set<Product> getProducts() {
		return products;
	}

	public void setProducts(Set<Product> products) {
		this.products = products;
	}

}

在同一个包中配置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">
<!-- Generated 2018-5-30 18:34:31 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
    <class name="pojo.User" table="USER">
        <id name="id" type="int">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <set name="products" table="USER_PRODUCT" inverse="false" lazy="false">
            <key>
                <column name="UID" />
            </key>
            <many-to-many class="pojo.Product" column="pid"/>
        </set>
    </class>
</hibernate-mapping>

在Product类增加对应User的集合

    private Set<User> users;
 
    public Set<User> getUsers() {
        return users;
    }
    public void setUsers(Set<User> users) {
        this.users = users;
    }

在Product.hbm.xml增加many-to-many映射

		<set name="users" table="user_product" lazy="false">
			<key column="pid" />
			<many-to-many column="uid" class="pojo.User" />
		</set>

在hibernate.cfg.xml中添加User的映射

<mapping resource="pojo/User.hbm.xml" />

在主类中测试many-to-many关系

		// 多对多关系映射
		Set<User> users = new HashSet<User>();
		for (int i = 0; i < 3; i++) {
			User user = new User();
			user.setName("user" + i);
			users.add(user);
			session.save(user);
		}

猜你喜欢

转载自blog.csdn.net/the_programlife/article/details/80554988
今日推荐