Hibernate框架完整教程:Java持久化技术从入门到精通
Hibernate 教程
最近我编写了许多关于Hibernate的教程。Hibernate是当前市场上最优秀的Java ORM(对象关系映射)工具之一。因此,这篇文章就像是一个全面的Hibernate教程和示例目录。您可以按照顺序学习这些Hibernate教程,从零开始逐步掌握Hibernate。我可能会在列表中添加更多的Hibernate教程,所以建议您将此页面加入书签并定期查看。
Hibernate教程目录
Hibernate新手教程
Hibernate支持JPA注解,并且非常灵活。我们可以使用XML、属性文件以及编程的方式配置它。这个教程是开始使用Hibernate框架的绝佳方法。本教程关注Hibernate所需的不同配置,并提供了基于简单XML映射和基于JPA注解的映射的示例。您还将学习不同的初始化SessionFactory的方式以及Hibernate框架的重要组件。
Hibernate一对一映射
大多数情况下,数据库表之间是相互关联的。关联的形式有很多种 – 一对一、一对多和多对多,这些关联类型在宽泛的层面上可以进一步细分为单向和双向映射。本教程通过使用XML配置和使用JPA注解配置来引导您实现Hibernate的一对一映射。
Hibernate一对多映射
简单来说,一对多映射意味着一张表中的一行可以映射到另一张表中的多行。例如,在一个购物车系统中,我们有一个商品表。一个购物车可以包含多个商品,因此这里存在一对多映射关系。在本教程中,您将学习如何使用基于XML的配置实现一对多映射,以及如何使用Hibernate注解来实现相同的映射。
Hibernate多对多映射
多对多映射通常在数据库中使用联接表实现,例如我们可以有购物车和商品表,以及一个购物车_商品联接表用于多对多映射。每个购物车可以包含多个商品,每个商品也可以属于多个购物车,因此这里存在多对多映射关系。本教程详细解释了Hibernate多对多单向和双向映射的用法和实现方法。
Hibernate查询语言(HQL)
Hibernate框架提供了一个功能强大的面向对象查询语言 – Hibernate查询语言(HQL)。它与SQL非常相似,主要区别在于HQL使用对象而不是表名,这使它更贴近面向对象编程的理念。本文详细解释了HQL的基本语法及其支持的不同子句。
Hibernate原生SQL查询
Hibernate通过使用SQLQuery对象提供了执行原生SQL查询的选项。当我们需要执行Hibernate API不支持的数据库特定查询时,这一功能非常实用,例如查询提示或Oracle数据库中的CONNECT关键字等特殊情况。
Hibernate命名查询
当项目中包含大量HQL或原生SQL查询时,可能会导致代码混乱,因为所有查询将分散在整个项目的各个位置。为此,Hibernate提供了命名查询功能,允许我们在中心位置定义查询,并在代码的任何地方重复使用它们。我们可以为HQL和原生SQL创建命名查询。Hibernate命名查询可以在Hibernate映射文件中使用query或sql-query元素定义,也可以通过使用JPA注解@NamedQuery和@NamedNativeQuery来定义。
Hibernate Criteria
Hibernate提供了Criteria API,它提供了一种更面向对象的方式来查询数据库并获取结果。我们不能使用Criteria来执行更新或删除查询,或任何DDL语句。它仅用于使用更面向对象的方法从数据库获取结果。Criteria API的一些常用功能包括:用于聚合函数(例如sum()、min()、max()等)的Projection,只获取选定列的ProjectionList,以及对结果进行排序等。
Hibernate一级缓存
如果使用得当,Hibernate缓存可以在提升应用程序性能方面发挥重要作用。缓存的核心思想是减少数据库查询次数,从而降低应用程序的响应时间。Hibernate一级缓存与Session对象相关联。Hibernate一级缓存默认启用,且无法禁用。不过,Hibernate提供了一些方法,允许我们从缓存中移除特定对象或完全清空缓存。在某个会话中缓存的任何对象对其他会话都是不可见的,并且当会话关闭时,所有缓存的对象也将随之丢失。
通过EHCache实现的Hibernate二级缓存
Hibernate二级缓存提供者包括EHCache和Infinispan,但EHCache更受欢迎,因为它易于集成并支持所有Hibernate缓存策略。本教程提供了一个完整的示例,演示如何将EHCache与Hibernate框架集成,以实现高效的二级缓存管理。
Hibernate的get vs load方法比较
Hibernate Session提供了多种方法来从数据库获取数据。其中两个常用方法是get()和load()。它们看起来相似,因为它们都用于从数据库中获取数据。然而,它们之间存在一些重要区别,本教程通过示例代码详细解释了这些差异及其适用场景。
Hibernate的save vs persist方法比较
Hibernate Session是Java应用程序和Hibernate框架之间的接口。本教程详细解释了Session中用于保存和更新表中数据的重要方法:save、saveOrUpdate、persist、update和merge,以及它们之间的区别和适用场景。
Hibernate的openSession vs getCurrentSession方法比较
Hibernate SessionFactory是获取会话并执行数据库操作的工厂类。Hibernate SessionFactory提供了三种方法来获取Session对象:getCurrentSession()、openSession()和openStatelessSession()。本教程通过示例代码详细解释了每种方法的特点、区别以及适用场景。
Hibernate log4j集成
Hibernate 4使用JBoss日志,但log4j是最流行的日志记录框架。本快速教程介绍了如何将log4j日志记录系统与Hibernate框架集成,以便更好地管理和跟踪应用程序的日志信息。
Hibernate Tomcat JNDI数据源示例
大多数情况下,Hibernate框架用于在Tomcat或其他servlet容器中运行的Web应用程序中。Hibernate可以使用在容器中定义的JNDI资源作为数据源,这是让servlet容器使用连接池处理数据库连接的首选方法。本示例展示了如何在Tomcat中配置JNDI数据源并与Hibernate集成。
Spring Hibernate集成
Spring是最常用的Java EE框架,而Hibernate是最流行的ORM框架。因此,在企业应用中经常使用Spring和Hibernate的组合。本教程首先展示如何使用Spring 4与Hibernate 3集成,然后演示如何将相同的项目更新以使用Hibernate 4。
Spring MVC Hibernate示例
本教程进一步介绍了如何将Hibernate与Spring MVC框架集成,并使用Spring的声明式事务管理替代Hibernate的事务管理,以实现更高效的事务控制。
Struts2 Hibernate集成示例
本教程解释了通过使用ServletContextListener将Hibernate与任何Web应用程序集成的一般方法。示例使用Struts2与Hibernate集成,但底层实际上只使用了Servlet技术。这与Spring集成不同,因为Struts2不提供任何对Hibernate集成的内置支持。
Hibernate验证器示例
数据验证是任何应用程序的重要组成部分。它是一个横切任务,发生在表示层、业务层以及持久层。JSR-303提供了基于注解的为Java bean属性应用验证的标准。Hibernate Validator支持JSR-303标准,本教程通过一个简单示例展示了如何使用Hibernate Validator进行数据验证。
Hibernate Tools Eclipse插件
如果您曾经开发过Hibernate项目,必然熟悉我们需要为Hibernate映射和配置文件设置的众多属性。如果没有适当的工具来指导我们查找和设置正确的属性,正确配置应用程序将变得非常困难。这就是Hibernate Tools Eclipse插件发挥作用的地方,它是开发Hibernate项目时不可或缺的插件。
Hibernate面试问题
具备扎实的Hibernate框架知识对于Java相关的技术面试是一个显著优势,这也是我编写这篇文章的原因。它包含了与Hibernate框架相关的大部分重要问题,并提供了详细的解答。建议您在面试前仔细阅读这些内容,以提升自己的知识水平和面试表现。
Hibernate教程 – 常见错误修复
- 如何配置hibernate.cfg.xml以便在离线状态下工作
- org.hibernate.AnnotationException: 未为实体类指定标识符
- org.hibernate.HibernateException: 在没有活动事务的情况下,get操作无效
- org.hibernate.HibernateException: 未配置当前会话上下文
- Hibernate程序无法终止
- 当未设置’hibernate.dialect’时,无法访问DialectResolutionInfo