從零打造在線網盤系統之Hibernate配置O/R映射
阿新 • • 發佈:2018-11-11
ppi rate 3.0 intra err 系列 源碼 ron xml配置
歡迎瀏覽Java工程師SSH教程從零打造在線網盤系統系列教程,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個在線網盤系統,本系列教程是從零開始,所以會詳細以及著重地闡述SSH三個框架的基礎知識,第四部分將會進入項目實戰,如果您已經對SSH框架有所掌握,那麽可以直接瀏覽第四章,源碼均提供在GitHub/ssh-network-hard-disk上供大家參閱
本篇學習要求
- 主鍵映射
- 普通屬性映射
- 組件映射
- 一對一關聯映射
- 多對一單向關聯映射
- 多對一雙向關聯映射
主鍵映射
註解配置
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id;
XML配置
<id name="id" column="id">
<!-- 主鍵的生成策略 -->
<generator class="identity"/>
</id>
Hiberante主鍵生成策略 http://www.cnblogs.com/hoobey/p/5508992.html
普通屬性映射
註解配置
@Basic
@Column(nullable = true)
private String username;
XML配置
<!-- 配置其他的屬性 --> <property name="username" column="username"/>
組件映射
註解配置
組件類 @Embeddable public class Name { ... } 組件屬性 @Embedded @AttributeOverrides({ @AttributeOverride(name = "firstName", column = @Column(name = "firstName")) @AttributeOverride(name = "lastName", column = @Column(name = "lastName")) }) private Name name;
XML配置
<component name="name" class="com.jimisun.domain.Name">
<property name="first" column="first"/>
<property name="last" column="last"/>
<component>
一對一關聯映射
一對一小節完整示例源碼下載
XML配置(模擬商品和商品詳情)
商品hbm.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置類和表結構的映射 -->
<class name="com.jimisun.domain.Product" table="products">
<!-- 配置id
見到name屬性,JavaBean的屬性
見到column屬性,是表結構的字段
-->
<id name="id" column="id">
<!-- 主鍵的生成策略 -->
<generator class="increment"/>
</id>
<!-- 配置其他的屬性 -->
<property name="name" column="name" type="java.lang.String"/>
<one-to-one name="productDetail" class="com.jimisun.domain.ProductDetail" cascade="all"/>
</class>
</hibernate-mapping>
商品詳情hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 配置類和表結構的映射 -->
<class name="com.jimisun.domain.ProductDetail" table="product_details">
<!-- 配置id
見到name屬性,JavaBean的屬性
見到column屬性,是表結構的字段
-->
<id name="id" column="id" type="int">
<!-- 主鍵的生成策略 -->
<generator class="foreign">
<param name="property">product</param>
</generator>
</id>
<!-- 配置其他的屬性 -->
<property name="detatil" column="detatil"/>
<one-to-one name="product" class="com.jimisun.domain.Product" constrained="true"/>
</class>
</hibernate-mapping>
多對一單向關聯映射
多對一單向關聯映射完整示例源碼
我們看完了一對一映射我們可以看一下多對一的的映射,這些都是在實際的應用開發中經常用到的,這裏提到的單向映射就是單向映射關系,例多個訂單和用戶之間是多對一的映射關系,但是轉換為Java對象來進行表示的時候就是,訂單的對象中擁有其所屬的用戶對象,但是用戶對象中並沒有包含其擁有的訂單,這種單向的映射關系就是單向映射,下面示例是多個訂單和用戶的單向關聯關系表示
配置多的一方
<many-to-one name="customer" column="customer_id" class="com.jimisun.domain.Customer" cascade="all"/>
public static void main(String[] args) {
Session session = HibernateSessionFactory.getSession();
Transaction transaction = session.beginTransaction();
Customer customer = new Customer();
customer.setName("bea");
Order order = new Order();
order.setNumber("1333");
order.setCustomer(customer);
session.save(order);
transaction.commit();
Integer id = order.getId();
Transaction transaction1 = session.beginTransaction();
Order order1 = session.get(Order.class, id);
if (order != null) {
System.out.println("Customer:" + order.getCustomer().getName());
System.out.println("OrderNumber:" + order.getNumber());
}
transaction1.commit();
session.close();
}
多對一雙向關聯映射
多對一雙向關聯映射完整示例源碼
多對一的雙向關聯其實是和多對一單向關聯是相似的,我們只需要在一方(這裏是指用戶)對象中增加一個集合用來存儲其訂單
private Set<Order> orders = new HashSet<>();
再在用戶對應的hbm.xml文件中對上述set集合進行配置
<set name="orders" cascade="save-update,delete" order-by="order_number asc" lazy="true">
<key column="customer_id"/>
<one-to-many class="com.jimisun.domain.Order"/>
</set>
本章總結
對象關系映射是Hibernate的核心,如何配置映射關系更是必會的技能,所以大家務必要掌握
從零打造在線網盤系統之Hibernate配置O/R映射