第三章Hibernate对象关系映射
- 格式:ppt
- 大小:1.33 MB
- 文档页数:30
hibernate的基本用法Hibernate是一个开源的Java框架,用于简化数据库操作。
它为开发人员提供了一个更加简单、直观的方式来管理数据库,同时也提高了应用程序的性能和可维护性。
本文将逐步介绍Hibernate的基本用法,包括配置、实体映射、数据操作等。
一、配置Hibernate1. 下载和安装Hibernate:首先,我们需要下载Hibernate的压缩包并解压。
然后将解压后的文件夹添加到Java项目的构建路径中。
2. 创建Hibernate配置文件:在解压后的文件夹中,可以找到一个名为"hibernate.cfg.xml"的文件。
这是Hibernate的主要配置文件,我们需要在其中指定数据库连接信息和其他相关配置。
3. 配置数据库连接:在"hibernate.cfg.xml"文件中,我们可以添加一个名为"hibernate.connection.url"的属性,用于指定数据库的连接URL。
除此之外,还需要指定数据库的用户名和密码等信息。
4. 配置实体映射:Hibernate使用对象关系映射(ORM)来将Java类映射到数据库表。
我们需要在配置文件中使用"mapping"元素来指定实体类的映射文件。
这个映射文件描述了实体类与数据库表之间的对应关系。
二、实体映射1. 创建实体类:我们需要创建一个Java类,用于表示数据库中的一行数据。
这个类的字段通常与数据库表的列对应。
同时,我们可以使用Hibernate提供的注解或XML文件来配置实体的映射关系。
2. 创建映射文件:可以根据个人喜好选择使用注解还是XML文件来配置实体类的映射关系。
如果使用XML文件,需要创建一个与实体类同名的XML文件,并在其中定义实体类与数据库表之间的映射关系。
3. 配置实体映射:在配置文件中,我们需要使用"mapping"元素来指定实体类的映射文件。
一、多选题1.在Hibernate 主配置文件(hibernate.cfg.xml)中,以下哪个元素()为它的根元素。
A.<hibernate-configuration>元素B.<session-factory>元素C.<property>元素D.<mapping>元素E.<hibernate-mapping>元素2.在Hibernate 主配置文件(hibernate.cfg.xml)中,是通过哪个元素()来配置映射文件的。
A.<hibernate-configuration>元素B.<session-factory>元素C.<property>元素D.<mapping>元素E.<hibernate-mapping>元素3.下面关于Hibernate 的映射文件说法正确的有哪些()。
A.Hibernate 是以xml 格式的文件来指定对象与关系数据之间的映射B.在hibernate.cfg.xml文件中可以配置<mapping>元素的resource属性来指定映射文件C.配置映射文件时,需要遵循它对应的DTD 文件格式D.在映射文件中,<class>元素的<id>子元素只能出现一次E.<id>元素的<generator>子元素用来设定标识符生成器4.在Hibernate 的映射文件中,<id>元素的<generator>子元素用来设定标识符生成器,以下对常用的标识符生成器的用法说法正确的是()。
A.increment:适用于代理主键。
用于为long, short 或者int 类型生成唯一标识B.identity:适用于代理主键。
由底层数据库生成标识符C.sequence:适用于代理主键。
Hibernate 根据底层数据库的序列来生成标识符D.hilo:使用一个高/低位算法高效的生成long、short 或者int 类型的标识符E.seqhilo:使用一个高/低位算法来高效的生成long、short 或者int 类型的标识符,给定一个数据库序列(sequence)的名字5.Hibernate 采用xml 文件来配置对象—关系映射有哪些好处()。
1、hibernate load()和get()有什么区别hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载,load默认支持延迟加载,在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,只能抛异常ObjectNotFoundEcception;所说的load方法抛异常是指在使用该对象的数据时,数据库中不存在该数据时抛异常,而不是在创建这个对象时。
由于session中的缓存对于hibernate来说是个相当廉价的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理(load时候之查询一级缓存,不存在则创建代理)。
get()现在一级缓存找,没有就去二级缓存找,没有就去数据库找,没有就返回null ;而对于get方法,hibernate一定要获取到真实的数据,否则返回null。
2、你对hibernate的理解?与jdbc比优缺点?(1)对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
(2)Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作(3)hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
(4)hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
缺点:Hibernate限制您所使用的对象模型。
例如,一个持久性类不能映射到多个表。
3、说一下hibernate的缓存机制?Hibernate的缓存包括Session的缓存和SessionFactory的缓存,其中SessionFactory的缓存又可以分为两类:内置缓存和外置缓存。
Session的缓存是内置的,不能被卸载,也被称为Hibernate的第一级缓存。
SessionFactory的内置缓存和Session的缓存在实现方式上比较相似,前者是SessionFactory对象的一些集合属性包含的数据,后者是指Session 的一些集合属性包含的数据。
《MyBatis核心技术全解与项目实战》读书笔记1. 第一章 MyBatis简介本章主要介绍了MyBatis的基本概念、特点和优势,以及其在Java企业级应用开发中的重要作用。
MyBatis是一个优秀的持久层框架,它将SQL语句与Java对象映射(POJO)相结合,使得开发人员可以更加方便地操作数据库。
MyBatis的主要目标是简化数据库操作,提高开发效率,同时也提供了良好的数据封装和安全性。
SqlSessionFactory:用于创建SqlSession对象,SqlSession是MyBatis中执行SQL语句的核心接口。
SqlSession:用于执行SQL语句的会话对象,可以通过它来执行增删改查等操作。
Mapper:映射器接口,用于定义SQL语句和Java对象之间的映射关系。
Configuration:MyBatis的全局配置类,用于配置各种属性,如缓存策略、事务管理等。
插件:MyBatis的插件机制,允许开发者自定义拦截器、类型处理器等组件,以实现对MyBatis的功能扩展。
灵活性:MyBatis支持多种存储结构,如JDBC、ODBC、JNDI等,同时还支持自定义类型处理器和插件,使得MyBatis能够满足各种复杂的数据库操作需求。
易用性:MyBatis提供了简洁的XML映射文件来描述SQL语句和Java对象之间的映射关系,使得开发者无需编写复杂的SQL语句即可完成数据库操作。
性能优化:MyBatis通过一级缓存和二级缓存机制来提高查询性能,同时还支持动态SQL、分页查询等功能,使得MyBatis能够在高并发环境下保持良好的性能表现。
安全性:MyBatis提供了严格的权限控制机制,可以限制不同用户对数据库的操作权限,保证数据的安全性。
1.1 MyBatis概念及特点MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。
相比于传统的数据访问技术,MyBatis让开发者能够更加直接地与数据库交互,从而有效地避免了大量繁琐的SQL语句编写工作。
◆hibernate是什么?1.hibernate 是一个框架(framework)2.hibernate 是一个orm框架[]●orm (object relation mapping) 对象关系映射框架o object -> 业务层(只对对象操作)r relation-> 关系数据库m mapping 对象关系映射文件3.hibernate 处于我们项目的持久层位置(正因为如此,所以有人又把hibernate称为持久层框架)4.hibernate 实际上就是对jdbc进行了轻量级的封装.5.hibernate 的基础还是我们java 反射机制●除了hiberante 这个orm框架,还有一些:apache ojb / toplink / ibatis / ejb cmpApache OJB ()Cayenne ()Jaxor ()Hibernate()iBatis ()jRelationalFramework ()mirage ()SMYLE ()TopLink ()把对象持久化: 把对象的信息保存到数据库或者是文件.总结: hibernate 是对jdbc进行轻量级封装的orm 框架,充当项目的持久层.◆为什么需要hibernate?◆快如入门案例:hiberante 可以用在j2se 项目,也可以用在j2ee (web项目中)struts是web框架,所以用在web项目我们使用手动配置hibernate方式开发一个hibernate 项目,完成crud操作。
开发流程1.创建一个项目2.画出一个简单项目框架示意图3.引入hibernate 开发包(从网上下载google hibernate ),完后我们4.开发hibernate 有三种方法(开发顺序)我们使用第二种开发项目创建employe 表.create table employee(id number primary key,name varchar2(64) not null,email varchar2(64) not null,hiredate date not null)创建一个序列,将来用于主键的自增长:--创建一个序列create sequence emp_seqstart with 1increment by 1minvalue 1nomaxvaluenocyclenocache5.开发domain对象和对象关系映射文件对象关系映射文件:作用是用于指定domain对象和表的映射关系. ,该文件的取名有规范: domain对象.hbm.xml,一般我们放在和domain对象同一个文件夹下(包下)我们的Employee.hbml.xml配置文件:<!DOCTYPE hibernate-mapping PUBLIC"-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.hsp.domain"><class name="Employee" table="employee"><!-- id元素用于指定主键属性--><id name="id" column="id" type="ng.Integer"><!-- 该元素用于指定主键值生成策略hilo native increment sequence uuid --><generator class="sequence"><param name="sequence">emp_seq</param></generator></id><!-- 对其它属性还有配置--><property name="name" type="ng.String"><column name="name" not-null="false" /></property><property name="email" type="ng.String" ><column name="email" not-null="false"/></property><property name="hiredate" type="java.util.Date"><column name="hiredate" not-null="false" /></property></class></hibernate-mapping>6.手动配置我们的hibernate.cfg.xml文件,该文件用于配置连接的数据库的类型,driver, ,用户名,密码,url ....同时管理对象关系映射文件,该文件的名称,我们一般不修改.hibernate.cfg.xml配置文件<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- hibernate 设计者,给我们提供了一写常用的配置--><!-- 配置使用的driver --><property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property> <property name="ername">scott</property><property name="connection.password">tiger</property><property name="connection.url">jdbc:oracle:thin:@127.0.0.1:1521:orclhsp</property> <!-- 配置dialect方言,明确告诉hibernate连接是哪种数据库--><property name="dialect">org.hibernate.dialect.OracleDialect</property><!-- 显示出对于sql --><property name="show_sql">true</property><!-- 指定管理的对象映射文件--><mapping resource="com/hsp/domain/Employee.hbm.xml"/></session-factory></hibernate-configuration>7.测试文件TestMain.javapackage com.hsp.view;import com.hsp.util.*;import java.util.Date;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.*;import com.hsp.domain.Employee;public class TestMain {/*** @param args*/public static void main(String[] args) {//查询[load]->hql语句(hibernate query language)}public static void delEmp() {//删除//获取一个sessionSession session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();//删除1.先获取该雇员,然后删除Employee emp=(Employee) session.load(Employee.class, 3);session.delete(emp);mit();session.close();}public static void updateEmp() {// TODO Auto-generated method stub//修改用户//获取一个会话Session session=MySessionFactory.getSessionFactory().openSession();Transaction ts=session.beginTransaction();//修改用户1. 获取要修改的用户,2.修改//load是通过主键属性,获取该对象实例.<--->表的记录对应Employee emp=(Employee) session.load(Employee.class, 3);emp.setName("韩顺平8");//update...emp.setEmail("abc@");mit();session.close();}public static void addEmployee() {//我们使用hibernate完成crud操作[这里我们只见对象,不见表]//现在我们不是用service ,直接测试.//1。
hibernate框架用法
Hibernate框架是一个开源的对象关系映射(ORM)框架,它可以
将Java对象映射到关系数据库中的表中,从而使得开发人员可以使用Java编程语言来访问和操作数据库。
Hibernate的使用流程如下:
1. 在Java类中定义实体对象及其属性和关系;
2. 在Hibernate中配置映射文件,将实体类映射为数据库表;
3. 通过Session API实现数据的增删改查操作。
Hibernate框架的优点有:
1. 开发效率高:Hibernate自动处理对象与数据库表之间的映射,使得开发人员可以将精力集中在业务逻辑上。
2. 数据库平台无关性好:Hibernate提供了一套底层数据库操作
接口,在数据操作层面上实现了面向对象与关系数据库的交互。
3. 透明性强:Hibernate框架屏蔽了大部分JDBC的细节,对于开发人员而言可以专注于业务需求的实现。
4. 高性能:Hibernate框架缓存机制、懒加载等一些优化措施,
可以改善数据库访问的性能。
同时,Hibernate还提供了一些高级特性,如事务管理、二级缓存、查询缓存、延迟加载等,可以更好地满足复杂应用的需要。
13-Hibernate关联关系映射:⼀对多孤⼉删除persist和merge是JPA提供的内容none是不使⽤级联,save-update是保存和更新的时候级联hibernate级联的取值none:不使⽤级联save-update:保存和更新时级联delete:删除的时候级联all:delete-orphan:孤⼉删除,孤⼦删除*仅限于⼀对多,只有⼀对多的时候才有类似⽗⼦关系的存在,才有⽗⼦表的存在。
认为⼀的⼀⽅是⽗⽅。
因为⼀个⽗亲是可以有多个孩⼦的。
多的⼀⽅是⼦的⼀⽅。
*当⼀个客户与某个订单解除关系,其实就是将外键置为null,如果你的订单没有所属的客户,那你的订单还有意义吗?订单没有了所属客户,就相当于⼀个孩⼦没有了⽗亲,将这种记录就删除了,这就叫做孤⼉删除。
*但是这只有在⼀对多的情况下才存在。
多对多的情况哪有这种关系,多对多就是多个⽗亲多个⼉⼦,这就不合理了。
⼀的⼀⽅是⽗⽅,多的⼀⽅是⼦⽅。
All-delete-orphan:我们现在想让1号客户和1号订单解除关系:⼀个部门可以有多个员⼯,⼀个员⼯只能属于⼀个部门。
解除关系就是把外键置为空了,就是把外键置为null了。
Hibernate:selectcustomer0_.cid as cid0_0_,customer0_.cname as cname0_0_fromcustomer customer0_wherecustomer0_.cid=?Hibernate:selectorder0_.oid as oid1_0_,order0_.addr as addr1_0_,order0_.cno as cno1_0_fromorders order0_whereorder0_.oid=?Hibernate:selectorders0_.cno as cno0_1_,orders0_.oid as oid1_,orders0_.oid as oid1_0_,orders0_.addr as addr1_0_,orders0_.cno as cno1_0_fromorders orders0_whereorders0_.cno=?Hibernate:updateorderssetcno=nullwherecno=?这个时候我们再看客户和订单都还在。
从零开始的JavaWeb开发入门教程JavaWeb开发是当前IT行业最热门的领域之一,许多人以此作为自己的职业发展方向。
本篇文章将从零开始,为读者提供一份全面的JavaWeb开发入门教程。
文章将分为以下章节进行介绍:JavaWeb的概念与发展、JavaWeb的基础知识、JavaWeb开发的常见框架、JavaWeb开发的数据库连接、JavaWeb开发中的前端技术、JavaWeb开发的安全性。
第一章:JavaWeb的概念与发展JavaWeb是基于Java语言开发的一种Web应用程序开发模式。
它结合了Java编程语言的强大性能和Web应用程序的灵活性,使开发人员能够创建功能强大、交互性强的Web应用程序。
JavaWeb的发展经历了多个阶段,从最初的Servlet和JSP技术,到Struts、Spring、Spring MVC等框架的兴起,再到目前流行的Spring Boot和Spring Cloud等微服务框架,JavaWeb开发已经成为了软件开发的主流技术之一。
第二章:JavaWeb的基础知识想要从零开始学习JavaWeb开发,首先需要了解JavaWeb的基础知识。
这包括了HTTP协议、Servlet、JSP等。
HTTP协议是JavaWeb开发的基础,它是一种用来传输超文本的协议。
Servlet是在服务器端运行的Java程序,用于接收和响应HTTP请求。
JSP是一种通过嵌入Java代码在HTML页面中生成动态内容的技术。
了解了这些基础知识后,我们才能更好地进行JavaWeb开发。
第三章:JavaWeb开发的常见框架JavaWeb开发中有许多常见的框架,它们可以帮助开发人员更高效地进行开发。
这些框架包括Struts、Spring、Spring MVC等。
Struts是一个基于MVC模式的Web应用框架,它提供了一套完整的解决方案,用于处理请求、响应和页面渲染。
Spring是一个开源框架,它提供了一种松耦合的开发模式,使得开发人员能够更容易地进行模块化的开发。
Hibernate是一个开源的Java持久化框架,它的底层原理是基于ORM(对象关系映射)的思想。
ORM是一种将对象模型和关系数据库模型进行映射的技术,使得开发人员可以使用面向对象的思维来操作数据库,而不需要直接编写SQL语句。
在Hibernate中,自动生成表结构的底层原理主要包括以下几个步骤:1. 实体类和映射文件:开发人员需要定义实体类,即对应数据库中的表。
同时,需要创建映射文件,将实体类和数据库表进行映射关联。
映射文件通常使用XML或注解的方式进行定义。
2. 元数据解析:Hibernate通过解析实体类和映射文件中的元数据信息,获取实体类的结构、属性和关系等信息。
3. 数据库连接和元数据读取:Hibernate会使用数据库连接来获取数据库的元数据信息,包括表、列、索引等信息,以及数据库的类型和约束等。
4. DDL生成:Hibernate根据实体类的元数据信息和数据库的元数据信息进行比较和分析,判断数据库中是否存在对应的表结构。
如果不存在,则使用元数据信息生成相应的SQL 语句,即DDL(数据定义语言)语句,用于创建表、字段、索引等。
5. 执行DDL:Hibernate会使用数据库连接执行生成的DDL 语句,将表结构创建到数据库中。
需要注意的是,Hibernate支持多种生成DDL的方式,包括自动创建、更新、验证等。
开发人员可以根据需要进行相应的配置,指定生成DDL的方式。
总的来说,Hibernate使用实体类和映射文件作为基础元数据,通过解析和比较元数据信息,生成相应的DDL语句,并通过数据库连接执行DDL语句,从而自动生成表结构。
这样,开发人员可以更专注于领域模型的设计和开发,而无需关心具体的数据库细节和SQL语句的编写。
Hibernate(V)——一对多与多对多关联关系映射(xml与注解)总结引言简要介绍Hibernate框架以及关联关系映射在数据库设计中的重要性。
Hibernate关联关系映射概述关联关系的重要性讨论在现实世界中对象间关系的重要性以及如何在数据库中表示这些关系。
Hibernate关联关系类型列举Hibernate支持的关联关系类型,包括一对一、一对多、多对一和多对多。
一对多关联关系映射概念解释解释一对多关联关系的概念,例如一个部门拥有多个员工。
XML映射方式详细描述如何在XML映射文件中配置一对多关联关系。
实体类定义展示一对多关系中实体类的Java代码示例。
XML映射文件提供一对多关系映射的XML配置示例。
注解映射方式详细描述如何使用注解配置一对多关联关系。
实体类定义展示使用注解的一对多关系中实体类的Java代码示例。
注解配置提供一对多关系映射的注解配置示例。
多对多关联关系映射概念解释解释多对多关联关系的概念,例如学生和课程之间的关联。
XML映射方式详细描述如何在XML映射文件中配置多对多关联关系。
实体类定义展示多对多关系中实体类的Java代码示例。
XML映射文件提供多对多关系映射的XML配置示例。
注解映射方式详细描述如何使用注解配置多对多关联关系。
实体类定义展示使用注解的多对多关系中实体类的Java代码示例。
注解配置提供多对多关系映射的注解配置示例。
关联关系映射的高级特性级联操作讨论级联保存、更新和删除的概念及其配置。
双向关系管理解释如何管理双向关联关系,确保数据的一致性。
延迟加载与即时加载讨论延迟加载和即时加载的概念及其在关联关系中的应用。
实践案例分析一对多关联关系案例通过一个具体的一对多关联关系案例,展示映射配置和数据操作。
多对多关联关系案例通过一个具体的多对多关联关系案例,展示映射配置和数据操作。
常见问题与解决方案一对多关联关系常见问题列举一对多关联关系映射中可能遇到的问题及其解决方案。
Hibernate框架简介⼀、什么是 Hibernate?Hibernate 是⼀个基于元数据的轻量级的 ORM 框架:1、元数据(Meta Data):data about data(数据的数据),也就是说描述⼀个对象数据,相当于这个对象的上下⽂环境。
2、轻量级:占⽤资源少,没有侵⼊性。
(其实我认为这只是相对⽽⾔,如果和 Ibatis 相⽐,它到成重量级的了)。
3、ORM:(Object Relation Mapping)对象关系数据库的映射这是 Hibernate 框架的重点,也就是说将我们程序中的实体(bean,这⾥也叫 POJO)和数据库中的表进⾏映射。
java 类型和 sql类型映射,⾯向对象设计和关系型数据库设计的映射,从⽽我们只需要将更多的精⼒放到业务中,⽽不是 sql 数据库⽅⾯。
4、POJO:(Plain Ordinary Java Object),⽆格式的普通 java 对象,也就是上边说的实体,和数据库做映射的简单类。
只是在这⾥提出了⼀个新的名词⽽已。
总⽽⾔之,Hibernate 就是将我们的数据库表和程序的 POJO 类进⾏映射,数据的操作进⾏了封装,使我们不⽤把数据库弄得⾮常精通,我们会⾯向对象编程就可以了,这样⼤⼤提⾼了我们的编程效率,⽽且对个⼈的知识要求也降低了。
⼆、Hibernate 基础 ----- 数据库操作在 Hibernate 出现之前,对数据库操作是基于 JDBC,这中间经历了操作 JDBC、封装 JDBC、ORM 三个阶段。
1、操作 JDBC 阶段:本阶段即在调⽤ JDBC 连接数据库的包时,需要⾃⼰进⾏编写的进⾏数据库⽤户登录验证的那段代码。
在这段代码中可以执⾏ SQL 语句进⾏数据查询、插⼊、删除等。
2、封装 JDBC 阶段:由于仅仅只是操作 JDBC,使得在实现不同逻辑功能时,都要重新编写进⾏数据库⽤户登陆验证的那段代码,使得代码重复很严重。
为此,引⼊了 JavaBean的技术,书写⼀个 DBAccess.java 类进⾏数据库⽤户登陆验证和数据库操作,并把其中进⾏数据库操作部分封装成不同的函数,那么实现后续的逻辑功能时只需调⽤这些函数即可实现。
hibernate的manytoone和onetomany用例-回复Hibernate是一个Java的持久化框架,常用于开发数据访问层的代码。
它提供了一种简化数据库操作的方法,可以通过对象和关系数据库进行交互。
在Hibernate中,常用的关系映射包括many-to-one和one-to-many。
本文将通过详细讲解这两种关系映射的用例来帮助读者更好地理解和使用Hibernate。
首先,我们来了解一下many-to-one关系映射。
这种映射关系表示一个实体对象(通常是较"多"的一方)可以与另一个实体对象(通常是较"一"的一方)建立多对一的关系。
在关系数据库中,这种关系通过外键实现。
在Hibernate中,我们可以通过注解或XML配置来映射这种关系。
假设我们要建立一个简单的图书和作者的many-to-one关系映射。
一个作者可以写多本图书,而一本图书只能由一个作者所写。
我们先创建一个Author类和一个Book类。
Author类包含作者的姓名、年龄等属性,并与多个Book对象建立关联,通过"books"字段来表示与图书的关系。
Book 类包含图书的名字、出版日期等属性,并通过"author"字段与一个Author 对象建立关联,表示与作者的关系。
javapublic class Author {private Long id;private String name;private int age;private List<Book> books;省略getter和setter方法}public class Book {private Long id;private String name;private LocalDate publishDate;private Author author;省略getter和setter方法}在Author类中,我们可以使用OneToMany注解来建立与Book对象的关联,并通过设置cascade属性来实现级联操作。
hibernate 关联查询原理
Hibernate 是一个流行的ORM(对象关系映射)框架,它提供了一种方便的方式来进行数据库操作,包括关联查询。
关联查询是指通过在一个查询中涉及多个表之间的关联关系来获取相关联的数据。
在Hibernate 中,关联查询的原理基于以下几个关键概念和技术:
1. 对象关系映射(ORM):Hibernate 负责将数据库表映射到Java 对象。
在关联查询中,Hibernate 会根据映射配置文件中的关联关系,将相关联的对象之间建立连接。
2. 延迟加载:Hibernate 支持延迟加载的策略,这意味着在关联查询时,只有在需要时才会实际从数据库中加载关联的数据。
这样可以避免不必要的数据加载和性能消耗。
3. 外键和关联映射:在映射配置文件中,你可以定义对象之间的关联关系,包括外键和映射的字段。
Hibernate 利用这些信息在查询时建立对象之间的连接。
4. SQL 查询语句生成:Hibernate 根据你在Java 代码中编写的查询条件和关联关系,自动生成对应的SQL 查询语句。
它会将对象
之间的关联关系转换为适当的JOIN 操作。
5. 结果集映射:在关联查询执行后,Hibernate 将返回的数据库结果集映射回相关的Java 对象。
它根据映射配置文件中的规则,将每行数据映射到相应的对象属性上,并维护对象之间的关联关系。
6. 缓存和一级缓存:Hibernate 使用缓存来提高查询性能。
在关联查询中,它会利用一级缓存来存储已经加载的对象,避免重复从数据库中获取。