歡迎瀏覽Java工程師SSH教程從零打造在線網盤系統系列教程,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個在線網盤系統,本系列教程是從零開始,因此會詳細以及着重地闡述SSH三個框架的基礎知識,第四部分將會進入項目實戰,若是您已經對SSH框架有所掌握,那麼能夠直接瀏覽第四章,源碼均提供在GitHub/ssh-network-hard-disk上供你們參閱html
本篇學習要求java
註解配置git
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id;
XML配置github
<id name="id" column="id"> <!-- 主鍵的生成策略 --> <generator class="identity"/> </id>
Hiberante主鍵生成策略 http://www.cnblogs.com/hoobey/p/5508992.htmlsession
註解配置app
@Basic @Column(nullable = true) private String username;
XML配置框架
<!-- 配置其餘的屬性 --> <property name="username" column="username"/>
註解配置dom
組件類 @Embeddable public class Name { ... } 組件屬性 @Embedded @AttributeOverrides({ @AttributeOverride(name = "firstName", column = @Column(name = "firstName")) @AttributeOverride(name = "lastName", column = @Column(name = "lastName")) }) private Name name;
XML配置ssh
<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的核心,如何配置映射關係更是必會的技能,因此你們務必要掌握