Hibernate实战(二)

Hibernate 在 Java 项目中的实战应用 在 Java 开发中,数据库操作是一个常见且重要的任务。传统的 JDBC 编程需要编写大量的 SQL 语句和处理数据库连接、事务等繁琐的操作,这不仅增加了开发的复杂度,还降低了代码的可维护性和可移植性。Hibernate 作为一个优秀的对象关系映射(ORM)框架,它的出现解决了这些问题。本文的目的是详细介绍 Hibernate 在 Java 项目中的实战应用,包括其基本概念、核心原理、具体操作步骤、项目实战案例等,帮助开发者更好地理解和使用 Hibernate 进行数据库操作。 阅读详情
Hibernate实战(二)
 Bromon原创 版权所有
 one-to-one关系
 在绝大多数系统当中不可能只存在一个数据表格,否则就违背了关系数据库的初衷。表与表的关系比较复杂,可以分为几种情况:

 ● 一对一关联(one to one)
 ● 一对多关联(one to many)
 ● 多对一关联(many to one)
 ● 多对多关联(many to many)

 按顺序来讲。假设一个一对一关联的例子是:
 表格:person
 id 编号(主键)
 name 姓名
 email email地址

 表格:spouse
 id 编号(外键)
 name 姓名

 person这个表保存用户信息,而spouse保存用户配偶的信息。在一般情况下一个人只有一个配偶,这很适合我们一对一的情况。如果你对婚外恋感兴趣的话,我们可以在一对多和多对一的关联中讨论这个问题,也许还可以在多对多中^_^(禽兽!)。

 OK,下面设计POJO:
 Person这个类非常简单:

 /*
 * Created on 2004-4-19
 */
 package org.bromon.zizz;

 /**
 * @author Bromon
 */
 public class Person
 {
 private int id;
 private String name;
 private String email;

 public void setId(int id)
 {
  this.id=id;
 }
 public int getId()
 {
  return(id);
 }

 public void setName(String name)
 {
  this.name=name;
 }
 public String getName()
 {
  return(name);
 }

 public void setEmail(String email)
 {
  this.email=email;
 }
 public String getEmail()
 {
  return(email);
 }
 } 


 然后编写它的映射规则,这个应该能够理解了:
 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
 "' target=_blank>http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">  

 <hibernate-mapping package="org.bromon.zizz">
 <class name="Person" table="person" lazy="true">
 <id name="id" type="integer" unsaved-value="null">
 <column name="id" sql-type="int" not-null="true"/>
 <generator class="identity"/>
 </id>

 <property name="name" column="name" not-null="true" unique="false"/>
 <property name="email" column="email" not-null="false"/>
 </class> 
 </hibernate-mapping> 

 so easy是不是?一切都按部就班。下面是Souse类:

 /*
 * Created on 2004-4-20
 */
 package org.bromon.zizz;

 /**
 * @author Bromon
 */
 public class Spouse
 {
 private int id;
 private String name;
 private Person person;

 public void setId(int id)
 {
  this.id=id;
 }
 public int getId()
 {
  return(id);
 }

 public void setName(String name)
 {
  this.name=name;
 }
 public String getName()
 {
  return(name);
 }

 public void setPerson(Person person)
 {
  this.person=person;
 }
 public Person getPerson()
 {
  return(person);
 }
 } 


 注意里面的域person。它的映射文件:

 <?xml version="1.0"?>
 <!DOCTYPE hibernate-mapping PUBLIC 
 "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
 "' target=_blank>http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">  

 <hibernate-mapping package="org.bromon.zizz">
 <class name="Spouse" table="spouse" lazy="true">
 <id name="id" type="integer" unsaved-value="null">
 <column name="id" sql-type="int" not-null="true"/>
 <generator class="foreign"> 
 <param name="property">person</param> 
 </generator> 
 </id>

 <property name="name" column="name" not-null="true" unique="false"/>
 <one-to-one name="person" class="Person" cascade="all" constrained="true" />
 </class> 
 </hibernate-mapping> 

 这里指明了id的generator是一个外键,和person相关联。然后指定一个one-to-one关系,不难理解是不是?Hibernate的确很符合我们的思维习惯。需要提醒的是,这种关联关系是单向的,Person并不需要去指定Spouse。

 下面来操作这两个类:

 /*
 * Created on 2004-4-20
 */
 package org.bromon.zizz;
 import net.sf.hibernate.*;
 import net.sf.hibernate.cfg.*;
 import net.sf.hibernate.tool.hbm2ddl.*;
 /**
 * @author Bromon
 */
 public class OperateSpouse
 {
 public static void main(String args[])
 {
  try
  {
   Configuration cfg=new Configuration().addClass(Spouse.class);
   cfg.addClass(Person.class);
   SessionFactory factory=cfg.buildSessionFactory();
   new SchemaExport(cfg).create(true,true);
   Session session=factory.openSession();
  
   Person person=new Person();
   person.setName("bromon");
   person.setEmail("bromon@163.com");
  
   Spouse spouse=new Spouse();
   spouse.setName("who");
   spouse.setPerson(person);
   
   Transaction ts=session.beginTransaction();
   session.save(person);
   session.save(spouse);
   ts.commit();
   session.close();
  }catch(Exception e)
  {
   System.out.println(e);
  }
 } 
 } 


 这个例子和第一篇中的例子非常相似。OK,执行一下,然后看看zizz数据库,搞掂。

Spring与Hibernate整合教程:从基础到实战 本文还有配套的精品资源,点击获取 简介:Spring和Hibernate是Java企业级开发的重要框架,其中Spring提供依赖注入和面向切面编程,而Hibernate则提供对象关系映射解决方案。本文深入探讨Spring+Hibernate整合的基础知识,涵盖关键概念、配置、对象映射及事务管理,并通过实战项目来实践理论知识,帮助学习者掌握企业级应用开发的核心技能。 ... 阅读详情

相关推荐

Java Hibernate与Spring Boot集成实战教程

Java语言以其跨平台、面向对象的特性而闻名。通过Java虚拟机(JVM)的抽象,Java代码能够在不同的操作系统上以“一次编写,到处运行”的方式执行,极大地提高了开发的灵活性和软件的可移植性。对象关系映射(Object-Relational Mapping,简称ORM)技术是一种在关系数据库和对象之间进行自动映射的技术。它通过使用描述对象和数据库之间的映射的元数据,将程序中的对象自动持久化到数据库中。ORM框架减少了开发者直接编写SQL代码的需要,使得数据库操作更加面向对象。

weixin_36289742的博客 815

Hibernate实战——使用HQL查询

一配置文件 <?xml version="1.0" encoding="GBK"?> <!-- 指定Hibernate配置文件的DTD信息 --> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http:...

实践求真知 352

Spring、SpringMVC、Hibernate框架集成实战

本文还有配套的精品资源,点击获取 简介:Spring、SpringMVC和Hibernate是Java开发中常用的三大框架,它们协同工作以构建Web应用程序。本课程设计项目实战将深入探讨这三个框架的核心概念,包括Spring的DI和AOP、SpringMVC的MVC设计模式、Hibernate的ORM功能。学生将通过实践任务,掌握这些框架的整合使用,包括配置Spring容器...

weixin_42573757的博客 1077

Hibernate+SpringMVC整合:实战二,…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 编码过滤器: package com.lrq.sh.web.filters; import java.io.IOException;

李荣强 337

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 519

RK3588交叉编译实战:从环境搭建到程序部署

本文详细介绍了在X86主机上为RK3588开发板搭建交叉编译环境的完整流程。从获取ARM工具链、配置sysroot,到实战编译Hello World和Qt应用程序,并提供了部署方法和常见问题解决方案。通过交叉编译,开发者可以在高性能PC上高效开发,并在ARM架构的RK3588上运行程序,大幅提升嵌入式开发效率。

weixin_29191669的博客 274

Hibernate实战(第2版)学习笔记二

51.Hibernate也理解type="java.lang.String",因此它不必使用反射。这种方法不太适用的最重要案例是java.util.Date属性。默认情况下,Hibernate认为java.util.Date是一个timestamp映射。如果不希望日期和时间信息都持久化,就要显式地指定type=“time”或者type="date"。 利用JPA注解,自动侦测属性的映射类...

bsr1983的专栏 358

Python爬虫(一)京东商品价格及详情页抓取

这是一个以http://item.jd.com/2957726.html为例的单网页抓取案例 import urllib.request; #载入urllib.request,用于获取页面html源代码 from pandas import Series; #载入series包 from pandas import DataFrame; #载入dataframe包 from bs4 impo

Data Proc 1万+

hibernate实战

离下班还有半个小时,写这个东东吧。 今天写了个hibernate实例。 第一步:向工程中添加hibernate的lib           * HIBERNATE_HOME/hibernate3.jar           * HIBERNATE_HOME/lib/*.jar           * 数据库 jdbc驱动 第二步:写hibernate.cfg.xml文件如下,这里有连接数据库,设置数据库方言,注册类映射文件User.hbm.xml(后面会提到)   jdbc:m

bluekeyv的专栏 842

Windows Server 2012 R2虚拟机安装全攻略:从镜像选择到网络配置一步到位

本文提供Windows Server 2012 R2虚拟机安装全攻略,涵盖从镜像选择到网络配置的完整流程。详细讲解在Oracle VM VirtualBox中的安装步骤、TCP/IP网络设置、系统优化及常见问题解决方案,帮助用户快速搭建可立即投入使用的服务器环境。特别适合IT初学者和系统管理员学习传统服务器应用的部署与配置。

weixin_28363123的博客 537

手把手教你配置RK3588的FFmpeg+RKmpp:从解码到RGA转换的完整避坑指南

本文详细介绍了在RK3588平台上配置FFmpeg+RKmpp进行硬件解码和RGA图像处理的完整流程,包括环境准备、DRM Prime解码输出实战、RGA硬件加速转换技巧以及全链路性能调优。通过具体代码示例和问题排查指南,帮助开发者高效实现视频处理流水线,显著提升性能并降低CPU占用率。

weixin_28366475的博客 471

Hibernate 原理及实战

1.三层架构分层 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的...

一间草堂的博客 4017

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1022

Hibernate旅程(二)Hibernate实例

上篇大概的介绍了Hibernate框架,本篇一个简单的hibernate例子来学习。 Hibernate配置 (1)   创建自己的java项目。 (2)   向自己的项目中添加Hibernate的相关的jar,我们可以创建自己的UserLibrary,这样就直接加入这个依赖包就可以了(如图2.1图2.2)。 图2.1 图2.2 需要添加上的jar包

Xinghf 8379

【数字IC验证快速入门】26、SystemVerilog项目实践之AHB-SRAMC(6)(AHB-SRAMC SVTB Overview)

导读:作者有幸在中国电子信息领域的排头兵院校“电子科技大学”攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思、清华紫光、联发科技等业界顶尖集成电路相关企业面授课程,对数字IC验证有了一些知识积累和学习心得。为帮助想入门前端IC验证的朋友,思忱一二后,特开此专栏,以期花最短的时间,走最少的弯路,学最多的IC验证技术知识。 文章目录一、内容概述二、AHB-SRAMC 验证计划 一、内容概述 AHB-SRAMC 验证计划 AHB-SRAMC 验证平台的架构图 AHB-SRAMC 验证平台的代.

悟已往之不谏 知来者之可追 2650

热力学仿真软件:Fluent_(13).燃烧与化学反应仿真

燃烧模型在热力学仿真软件中扮演着至关重要的角色。Fluent 提供了多种燃烧模型,包括层流预混燃烧模型、湍流预混燃烧模型、非预混燃烧模型、部分预混燃烧模型等。这些模型可以帮助用户模拟不同的燃烧过程,从而更好地理解燃烧现象和优化燃烧系统设计。

kkchenjj的博客 1250

Hibernate框架介绍以及入门 【二】Hibernate的常见配置

在面试前我整理归纳了一些面试学习资料,文中结合我的朋友同学面试美团滴滴这类大厂的资料及案例由于篇幅限制,文档的详解资料太全面,细节内容太多,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!大家看完有什么不懂的可以在下方留言讨论也可以关注。[外链图片转存中…(img-nFWKHbXK-1712075636824)][外链图片转存中…(img-LendfM22-1712075636825)]

2301_79058515的博客 1127

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

UFS Hibernate介绍--代码部分

一 . UFS Hibernate简介

guozhidixian的博客 3855

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Hibernate实战

Hibernate实战http://blog.youkuaiyun.com/bromon/archive/2004/06/22/22655.aspx

dellsoft的专栏 787

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Hibernate 实战(1)

Hibernate 实战(1)

dominolu的专栏 887

Java Persistence with Hibernate中文版Hibernate实战第2版勘误

http://www.javaeye.com/topic/179802Hibernate Spring Java Persistence API EJB3 相关的术语及关键字 还有其它相关的一些链接: Java Persistence with Hibernate中文版Hibernate实战第2版出版 关于Java持久化相关的资源汇集:Java Persistence API 错误难免,有则改

简单就是美! 2967

Hibernate开发流程(二)

Hibernate环境搭建 1. 导入hibernate-release-5.1.0.Final\lib\required路劲下所有的jar包: 2. 导入数据库驱动的jar包: Hibernate开发步骤 1. Hibernate配置文件 Hibernate配置文件的默认文件名为hibernate.cfg.xml,当程序调用Configuration对象的configure()方

泥陶匠 4026

hibernate学习(二)

hibernate学习(二)(hibernate配置)

m0_55028858的博客 709

Hibernate实战(一)

Hibernate实战  bromon原创 请尊重版权    对象关系映射(Object Relative Mapping)简称ORM,是面向对象开发的一个热点,用来解决JDBC开发中手动进行OR映射的繁杂与不便。EJB中的实体Bean在这个领域是很著名的——既因为它的先进而著名,也因为它的低效而著名。有过实体Bean开发经验的人可能都会为实现远程接口造成的效率低下而头痛,在很多不大不小的项目中

Sometimes Java 3198

Hibernate(二)

1. Hibernate的持久化类和对象标识符 1.1 持久化类的编写规范 1.1.1 什么是持久化类 Hibernate是持久层的ORM映射框架,专注于数据的持久化工作。 持久化就是将内存中的数据永久存储到关系型数据库中。 持久化类指的是一个Java类与数据库表建立了映射关系,那么这个类称为是持久化类。其实你可以简单的理解为持久化类就是一个Java类有了一个映射文件与数据库的表建立了关系。 1.1.2 持久化类的编写规范 应该遵循JavaBean的编写规范: Bean:在软件开发中是指的可重用的组

Wgy1993的博客 324
上一篇: Hibernate实战(一)
下一篇: Hibernate实战(三)
bromon
博客等级 码龄25年 61粉丝 81原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值