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

本篇学习要求

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

主键映射

注解配置

  1. @Id
  2. @GeneratedValue(strategy = GenerationType.IDENTITY)
  3. private Integer id;

XML配置

  1. <id name="id" column="id">
  2. <!-- 主键的生成策略 -->
  3. <generator class="identity"/>
  4. </id>

Hiberante主键生成策略 http://www.cnblogs.com/hoobey/p/5508992.html

普通属性映射

注解配置

  1. @Basic
  2. @Column(nullable = true)
  3. private String username;

XML配置

  1. <!-- 配置其他的属性 -->
  2. <property name="username" column="username"/>

组件映射

注解配置

  1. 组件类
  2. @Embeddable
  3. public class Name {
  4. ...
  5. }
  6. 组件属性
  7. @Embedded
  8. @AttributeOverrides({
  9. @AttributeOverride(name = "firstName", column = @Column(name = "firstName"))
  10. @AttributeOverride(name = "lastName", column = @Column(name = "lastName"))
  11. })
  12. private Name name;

XML配置

  1. <component name="name" class="com.jimisun.domain.Name">
  2. <property name="first" column="first"/>
  3. <property name="last" column="last"/>
  4. <component>

一对一关联映射

一对一小节完整示例源码下载

XML配置(模拟商品和商品详情)

  1. 商品hbm.xml配置
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE hibernate-mapping PUBLIC
  4. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  5. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  6. <hibernate-mapping>
  7. <!-- 配置类和表结构的映射 -->
  8. <class name="com.jimisun.domain.Product" table="products">
  9. <!-- 配置id
  10. 见到name属性,JavaBean的属性
  11. 见到column属性,是表结构的字段
  12. -->
  13. <id name="id" column="id">
  14. <!-- 主键的生成策略 -->
  15. <generator class="increment"/>
  16. </id>
  17. <!-- 配置其他的属性 -->
  18. <property name="name" column="name" type="java.lang.String"/>
  19. <one-to-one name="productDetail" class="com.jimisun.domain.ProductDetail" cascade="all"/>
  20. </class>
  21. </hibernate-mapping>
  1. 商品详情hbm.xml
  2. <?xml version="1.0" encoding="UTF-8"?>
  3. <!DOCTYPE hibernate-mapping PUBLIC
  4. "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  5. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
  6. <hibernate-mapping>
  7. <!-- 配置类和表结构的映射 -->
  8. <class name="com.jimisun.domain.ProductDetail" table="product_details">
  9. <!-- 配置id
  10. 见到name属性,JavaBean的属性
  11. 见到column属性,是表结构的字段
  12. -->
  13. <id name="id" column="id" type="int">
  14. <!-- 主键的生成策略 -->
  15. <generator class="foreign">
  16. <param name="property">product</param>
  17. </generator>
  18. </id>
  19. <!-- 配置其他的属性 -->
  20. <property name="detatil" column="detatil"/>
  21. <one-to-one name="product" class="com.jimisun.domain.Product" constrained="true"/>
  22. </class>
  23. </hibernate-mapping>

多对一单向关联映射

多对一单向关联映射完整示例源码

我们看完了一对一映射我们可以看一下多对一的的映射,这些都是在实际的应用开发中经常用到的,这里提到的单向映射就是单向映射关系,例多个订单和用户之间是多对一的映射关系,但是转换为Java对象来进行表示的时候就是,订单的对象中拥有其所属的用户对象,但是用户对象中并没有包含其拥有的订单,这种单向的映射关系就是单向映射,下面示例是多个订单和用户的单向关联关系表示

  1. 配置多的一方
  2. <many-to-one name="customer" column="customer_id" class="com.jimisun.domain.Customer" cascade="all"/>
  1. public static void main(String[] args) {
  2. Session session = HibernateSessionFactory.getSession();
  3. Transaction transaction = session.beginTransaction();
  4. Customer customer = new Customer();
  5. customer.setName("bea");
  6. Order order = new Order();
  7. order.setNumber("1333");
  8. order.setCustomer(customer);
  9. session.save(order);
  10. transaction.commit();
  11. Integer id = order.getId();
  12. Transaction transaction1 = session.beginTransaction();
  13. Order order1 = session.get(Order.class, id);
  14. if (order != null) {
  15. System.out.println("Customer:" + order.getCustomer().getName());
  16. System.out.println("OrderNumber:" + order.getNumber());
  17. }
  18. transaction1.commit();
  19. session.close();
  20. }

多对一双向关联映射

多对一双向关联映射完整示例源码

多对一的双向关联其实是和多对一单向关联是相似的,我们只需要在一方(这里是指用户)对象中增加一个集合用来存储其订单

  1. private Set<Order> orders = new HashSet<>();

再在用户对应的hbm.xml文件中对上述set集合进行配置

  1. <set name="orders" cascade="save-update,delete" order-by="order_number asc" lazy="true">
  2. <key column="customer_id"/>
  3. <one-to-many class="com.jimisun.domain.Order"/>
  4. </set>

本章总结

对象关系映射是Hibernate的核心,如何配置映射关系更是必会的技能,所以大家务必要掌握

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

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

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  2. 从零打造在线网盘系统之Hibernate查询与更新技术

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

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

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  4. 从零打造在线网盘系统之Struts2框架配置全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  5. 从零打造在线网盘系统之Struts2框架核心功能全解析

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  6. 从零打造在线网盘系统之SSH框架整合

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  7. SSH教程从零打造在线网盘系统前言&目录

    本系列教程内容提要 本系列教程是一个学习教程,是关于Java工程师的SSH(Struts2+Spring+Hibernate)系列教程,本教程将会分为四个部分和大家一同打造一个在线网盘系统,由于教程是 ...

  8. vue+nodejs+express+mysql 建立一个在线网盘程序

    vue+nodejs+express+mysql 建立一个在线网盘程序 目录 vue+nodejs+express+mysql 建立一个在线网盘程序 第一章 开发环境准备 1.1 开发所用工具简介 1 ...

  9. Layui框架+PHP打造个人简易版网盘系统

    网盘系统   大家应该都会注册过致命的一些网盘~如百度云.百科介绍:网盘,又称网络U盘.网络硬盘,是由互联网公司推出的在线存储服务,服务器机房为用户划分一定的磁盘空间,为用户免费或收费提供文件的存储. ...

随机推荐

  1. hbase权威指南阅读随手笔记二之过滤器

    转自:http://blog.csdn.net/saint1126/article/details/8257941 base过滤器的比较操作符:   LESS  <LESS_OR_EQUAL & ...

  2. thinkphp 操作mssql2008

    配置文件 <?php return array( //'配置项'=>'配置值' //'USERNAME'=>'admin', //赋值 //数据库配置信息 'DB_TYPE' =&g ...

  3. 浮点纹理 opengl

    原文地址:http://wangqingyun84.blog.163.com/blog/static/790836172010323113604/ 因为 glsl部分 绑定fbo 看到要用浮点纹理,搜 ...

  4. VC++ : VS2008 使用ATL开发COM组件

    新建ATL Project,工程名命名为MyAtlCom: 出现工程 向导,一路“Next”: Add class,点击添加 ATL Simple Object , 类名CStatistic, 接口I ...

  5. OpenCV学习:OpenCV介绍

    OpenCV全称是:Open Source Computer Vision Library(开源计算机视觉库). 于1999年由Intel建立,如今由Willow Garage提供支持. 跨平台,可以 ...

  6. 巧妙的利用Mongodb做地理空间查询

  7. mysql数据库中,查看数据库的字符集(所有库的字符集或者某个特定库的字符集)

    需求描述: mysql中,想要查看某个数据库的字符集.通过information_schma模式下的schemata表来查询 环境描述: mysql版本:5.7.21-log 操作过程: 1.查看in ...

  8. C#操作缓存--CacheHelper缓存帮助类

    /// <summary>/// 类说明:Assistant/// 联系方式:361983679  /// 更新网站:<a href=\"http://www.cckan. ...

  9. WPF 在事件中绑定命令

    导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实 ...

  10. mybatis由浅入深day02_9.3.5使用生成的代码_9.4逆向工程注意事项

    9.3.5 使用生成的代码 需要将生成工程中所生成的代码拷贝到自己的工程中. 拷这4个到我们原来的spring_mybatis1216工程下 ItemsMapper.java package cn.i ...