从零打造在线网盘系统之Hibernate配置O/R映射

jimisun 2018-11-11 原文

从零打造在线网盘系统之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的核心,如何配置映射关系更是必会的技能,所以大家务必要掌握

posted on 2018-11-11 14:56 jimisun 阅读() 评论() 编辑 收藏

 

 
版权声明:本文为jimisun原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/jimisun/p/9942068.html

从零打造在线网盘系统之Hibernate配置O/R映射的更多相关文章

  1. 从零打造在线网盘系统之Hibernate框架起步

    从零打造在线网盘系统之Hibernate框架起步 欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程 […]...

  2. 从底层源码浅析Mybatis初始化过程

    目录 搭建源码环境 POM依赖 测试SQL Mybatis全局配置文件 UserMapper接口 UserMa […]...

  3. 从零打造在线网盘系统之Struts2框架起步

    从零打造在线网盘系统之Struts2框架起步 欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本 […]...

随机推荐

  1. Django 开发项目创建

    创建项目环境 """ 为项目创建一个虚拟环境 >: mkvirtualenv 环境名 """ """ 按 […]...

  2. python常用函数进阶(2)之map,filter,reduce,zip

    Basic Python : Map, Filter, Reduce, Zip 1-Map() 1.1 Syn […]...

  3. activemq概念介绍

    ActiveMQ概念介绍 是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Pro […]...

  4. background-repeat

    ■ 定义 background-repeat属性用于定义是否及如何对背景图像进行平铺 ■ 使用说明 语法: b […]...

  5. Flask(9)- 蓝图的基本使用

    前言 在前面的例子中,所有的页面处理逻辑都是放在同一个文件中,随着业务代码的增加,将所有代码都放在单个程序文件 […]...

  6. seg:NLP之正向最大匹配分词

    已迁移到我新博客,阅读体验更佳seg:NLP之正向最大匹配分词 完整代码实现放在我的github上:click […]...

  7. 安装SQL Server DQS 和 MDS

    tep1:   安装特性时选择Data Quality Services 和 Master Data Serv […]...

  8. 电子元器件采购需要掌握哪些基础知识

    电子元器件的分类 用于制造或组装电子整机用的基本零件称为电子元器件,元器件是电子电路中的独立个体。 主动元件与 […]...

展开目录

目录导航