分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

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

发布时间:2023-09-06 02:21责任编辑:苏小强关键词:配置Hibernate

欢迎浏览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映射

原文地址:https://www.cnblogs.com/jimisun/p/9942068.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved