由Gavin King创建的Hibernate ,被称为Java开发人员最好的和主导的对象/关系持久性(ORM)工具(现在支持.NET)。 它提供了许多优雅和创新的方法来简化Java中的关系数据库处理任务。
Hibernate在很多方面都很出色,但是需要适当地使用它。 在本教程中,它提供了使用Hibernate3的许多分步示例和说明。
PS教程已更新为Hibernate v3.6.1.Final。
休眠快速入门
Hello World示例,以体验Hibernate框架。
- Maven 2 + Hibernate 3.2.3 + MySQL 5.0示例(XML映射)
MySQL数据库中的Hibernate 3.2.3示例,具有经典的hbm映射。 - Maven 2 + Hibernate 3.2.3 + MySQL 5.0示例(注释)
MySQL数据库中的Hibernate 3.2.3示例,带有Hibernate / JPA注释。 - Maven 3 + Hibernate 3.6.3 + Oracle 11g示例(XML映射)
Oracle数据库中的Hibernate 3.6示例,具有经典的hbm映射。 - Maven 3 + Hibernate 3.6.3 + Oracle 11g示例(注释)
Oracle数据库中的Hibernate 3.6示例,带有Hibernate / JPA注释。
休眠关联(表关系)
在Hibernate中如何定义一对一,一对多,多对多的表关系。
- 一对一示例(XML映射)
使用hbm映射文件休眠一对一示例。 - 一对一示例(注释)
使用注释代码休眠一对一示例。 - 一对多示例(XML映射)
使用hbm映射文件休眠一对多示例。 - 一对多示例(注释)
使用注释代码休眠一对多示例。 - 多对多示例(XML映射)
使用hbm映射文件休眠许多示例(连接表中没有多余的列)。 - 多对多示例(注释)
使用注释代码休眠多对多示例(连接表中没有多余的列)。 - 多对多示例–联接表+额外列(注释)
使用注释代码休眠多对多示例(在连接表中有额外的列)。 - 主题外:了解反向按键,示例和说明
“ inverse”是Hibernate中最令人困惑的关键字,但是您必须清楚地理解这一点才能调整您的关系表现。
Hibernate / JBoss工具+ Eclipse IDE
了解如何使用Hibernate工具是必须的!
- 在Eclipse IDE中安装Hibernate / JBoss工具
在您的Eclipse IDE中安装Hibernate。 - 使用Hibernate工具生成Hibernate映射文件和注释
自动为您生成休眠代码。
休眠记录
如何在Hibernate中进行日志记录
- 在Hibernate中配置日志记录– SLF4j + Log4j
将SLF4j + Log4j与Hibernate集成。 - 在Hibernate中配置日志记录–登录
将Logback与Hibernate集成。
休眠连接池
如何在Hibernate中配置数据库连接池
- 在Hibernate中配置C3P0连接池
将C3P0与Hibernate集成。 - 在Hibernate中配置DBCP连接池
将Apache DBCP与Hibernate集成。
休眠级联
休眠级联用于自动管理另一端的状态。
- 级联示例(保存,更新,删除和删除孤立孤岛)
保存,更新,删除和删除孤立对象中的级联示例。 以及删除和删除孤儿之间的区别。 - 级联与逆之间的区别
许多Hibernate开发人员对级联和逆之间的区别感到困惑,这就是解释。 - 级联– JPA和Hibernate注释常见错误
由Hibernate初学者或经验丰富的开发人员犯的一个超级容易的常见注释错误– Hibernate中的JPA级联注释?
休眠查询语言(HQL)
Hibernate自己的数据处理语言,与数据库SQL语言非常相似。
- 休眠查询示例(HQL)
HQL CRUD示例,选择,更新,删除和批量插入(不支持单个插入)。 - Hibernate参数绑定示例
使用“命名参数”和“位置参数”方法将参数绑定到HQL。 - 如何在Hibernate查询中嵌入Oracle提示
将Oracle提示嵌入到Hibernate Query中以提高Oracle查询性能的技巧。
休眠标准
Hibernate Criteria API是Hibernate查询语言(HQL)的替代方法。 在许多可选的搜索条件中,它始终是一个很好的解决方案。
- 休眠条件示例
标准示例–基本查询,排序查询,限制查询和分页结果。
Hibernate本机SQL
在某些情况下,Hibernate HQL或Criteria不足以完成您想要的事情,在这里您可以直接使用本机数据库SQL语言。
- Hibernate本机SQL查询示例
显示如何在Hibernate中使用本机SQL的指南。
休眠命名查询
命名查询使开发人员可以将HQL放入XML映射文件或注释中,以实现可维护性,而您只是不希望所有HQL语法分散在整个Java代码中。 🙂
- Hibernate命名查询示例
使用XML文件和注释中的命名查询。
休眠交易
与Hibernate Transaction相关的所有事物
- Hibernate Transaction句柄示例
一个使用Hibernate事务的简单标准示例。
休眠高级技术
一些Hibernate Advance技术,很少使用但实用的技能(数据过滤器和拦截器)。
- Hibernate数据过滤器示例– XML和注释
Hibernate数据过滤器用于过滤从数据库检索的数据,这是在XML或注释中使用数据过滤器的指南。 - Hibernate拦截器示例–审核日志
Hibernate拦截器用于拦截诸如CRUD操作之类的Hibernate事件,这是使用Hibernate拦截器实现审核日志的详细示例。
休眠性能
一些调整将使您的Hibernate运行更快faster
- 动态插入属性示例
使用动态插入避免在SQL INSERT语句中包含未修改的属性。 - 动态更新属性示例
使用动态插入避免在SQL UPDATE语句中包含未修改的属性。 - Hibernate可变示例(类和集合)
使用mutable关键字可以避免生成不必要的SQL语句。 - Hibernate –获取策略示例
Hibernate的获取策略用于优化Hibernate生成的select语句,这是任何Hibernate开发人员必须学习的技能。 - session.get()和session.load()之间的区别
了解何时应该使用get或load来检索对象,以避免对数据库造成不必要的打击。
将Hibernate与其他框架集成
将Hibernate与其他框架集成的示例。
- Struts + Hibernate集成
将Hibernate与Struts框架集成的示例。 - Struts + Spring + Hibernate集成
将Hibernate与Struts和Spring框架集成在一起的示例。 - Spring + Hibernate集成
将Hibernate与Spring框架集成的示例。 - Spring + Hibernate集成(注释)
将Hibernate与Spring框架(注释版本)集成的示例。
休眠常见问题
一些频率回答问题:
- 如何从不同目录加载hibernate.cfg.xml
默认情况下,Hibernate在项目类路径中查找hibernate.cfg.xml,这是从指定文件夹加载它的指南。 - 如何以编程方式添加Hibernate XML映射文件(hbm.xml)
以编程方式加载hibernate.cfg.xml的技巧 - Hibernate数据库方言列表
不同类型的数据库供应商的方言集合列表。 - show_sql,format_sql和use_sql_comments
配置Hibernate以显示生成的SQL语句以进行控制台。 - 如何显示休眠SQL参数值– P6Spy
使用P6Sqpy第三方库显示Hibernate SQL参数值。 - 如何显示休眠SQL参数值-Log4j
使用Log4j显示Hibernate SQL参数值。 - 如何在Hibernate中调用存储过程
不建议将业务逻辑放入存储过程中,不要紧,您仍然允许在Hibernate中调用存储过程。 - 如何在Hibernate中使用数据库保留关键字
在某些特殊情况下,您可能需要在Hibernate类中使用database关键字(不推荐),这是实现此目的的一个技巧。 - 如何将图像保存到数据库
一个教程,说明如何使用Hibernate将图像保存到数据库中。
休眠常见错误
以下是Hibernate开发中常见错误消息的列表。
- 如果命名的列是关键字,例如DESC,则无法插入
- 休眠–找不到C3P0ConnectionProvider
- 休眠–不赞成使用AnnotationConfiguration类型
- java.lang.ClassNotFoundException:javassist.util.proxy.MethodFilter
- 请记住,序数参数基于1! –休眠模板
- org.hibernate.AnnotationException:未知的Id.generator
- 必须使用AnnotationConfiguration实例才能使用
- java.lang.NoClassDefFoundError:org / dom4j / DocumentException
- java.lang.NoClassDefFoundError:org / apache / commons / logging / LogFactory
- java.lang.NoClassDefFoundError:org / apache / commons / collections / SequencedHashMap
- java.lang.NoClassDefFoundError:net / sf / cglib / proxy / CallbackFilter
- java.lang.NoClassDefFoundError:com / mchange / v2 / c3p0 / DataSources
- java.lang.NoClassDefFoundError:org / hibernate / annotations / common / reflection / ReflectionManager
- java.lang.NoClassDefFoundError:antlr / ANTLRException
- java.lang.NoClassDefFoundError:javax / transaction / Synchronization
- java.lang.ClassFormatError:类文件中不是本机或抽象的方法中的缺少Code属性…
- java.lang.NoSuchMethodError:org.objectweb.asm.ClassWriter
- java.lang.ClassNotFoundException:javax.persistence.Entity
- java.lang.ClassNotFoundException:javax.transaction.TransactionManager
- java.lang.ClassFormatError:类文件中不是本机或抽象的方法中的缺少Code属性…
题外话
- 为什么我为项目选择Hibernate框架?
我之所以喜欢在未来的项目中实施Hibernate,是因为。