zoukankan      html  css  js  c++  java
  • 从零打造在线网盘系统之Hibernate配置O/R映射

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重地阐述SSH三个框架的基础知识,第四部分将会进入项目实战,如果您已经对SSH框架有所掌握,那么可以直接浏览第四章,源码均提供在GitHub/ssh-network-hard-disk上供大家参阅

    本篇学习要求

    1. 主键映射
    2. 普通属性映射
    3. 组件映射
    4. 一对一关联映射
    5. 多对一单向关联映射
    6. 多对一双向关联映射

    主键映射

    注解配置

        @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的核心,如何配置映射关系更是必会的技能,所以大家务必要掌握

  • 相关阅读:
    oc73--NSArray使用
    oc72--NSArray排序
    oc71--NSArray2
    oc70--NSArray1
    oc69--NSMutableString
    oc68--NSString
    oc67--NSString1
    驱动人生病毒处理的简单方法(20191207)
    CentOS 安装libgdi的方法
    局域网Linux机器中病毒简单处理 .aliyun.sh 挖矿病毒 ---不彻底
  • 原文地址:https://www.cnblogs.com/jimisun/p/9942068.html
Copyright © 2011-2022 走看看