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

从零打造在线网盘系统之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. loadrunner -56992

    设置Run-time Settings ,network speed ,use bandwidth为 512: 回放脚本没有报错,5个并发运行场景报如下错误: vuser_init.c(12): Er ...

  2. com.sun.awt.AWTUtilities.setWindowOpacity相关说明

    在eclipse中(jdk1.6.*)版本中出现编译不通过而报错,报错是因为这个包里面的方法不属于jdk正式版本,也就是不能保证下个版本还存在,所以编译器会拒绝,你可以在eclipse中如下设置: 选 ...

  3. linux -- ubuntu14.10安装gnome桌面环境和dock工具

    ubuntu14.10系统自带Unity桌面环境,但是还是习惯于gnome桌面环境,再加上dock用着就很顺手了.   方法/步骤 首先,按Ctrl+Alt+T,调出终端.在其中输入:sudo apt ...

  4. Oracle Net Manager 服务命名配置以及用PL/SQL 登陆数据库

    我们知道,要连接一个数据库需要知道四个参数: 1. 登陆用户名:user: 2. 登录密码:password: 3. 存放数据库的服务器地址(server_ip)和端口(server_port): 4 ...

  5. spark 安装配置

    最佳参考链接 https://opensourceteam.gitbooks.io/bigdata/content/spark/install/spark-160-bin-hadoop26an_zhu ...

  6. mysqldump: command not found

    原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件.首先得知道mysql命 ...

  7. linux系统中,查看当前系统中,都在监听哪些端口

    需求描述: 查看当前系统中都监听着哪些的端口,用netstat命令,在此记录下 操作过程: 1.查看系统中都在监听哪些端口 [root@testvm home]# netstat -ntl Activ ...

  8. linux中,ssh实现免密自动登录到远程主机,ssh信任的实现

    需求描述: 平时使用ssh的时候,一般使用ssh都是通过用户名和密码登录到远程主机上, 然后执行一些命令,远程登录过程中,需要手动的输入密码(提示输入密码之后), 但是,在实际的应用过程中,涉及到让脚 ...

  9. 使用mt_rand代替rand

    mt_rand比rand生成的随机数“更随机”,重复值较少 下面是测试: <?php function t1($num=10000){ $arr = array(); for ($i=0; $i ...

  10. /etc/logrotate.conf

    /etc/logrotate.conf 是 Logrotate 工具的一个配置文件,这个工具用来自动切割系统日志,Logrotate 是基于 cron 来运行的,如下: [root@localhost ...