Hibernate教程
文章平均质量分 83
智慧浩海
源码资源仅供个人研究参考学习,不得将内容资源用于商业或者非法用途,否则,一切后果请用户自负,暂不提供安装服务和技术支持。文档资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。
展开
-
Hibernate整合EHCache实现二级缓存
在《》教程介绍的几种常用的二级缓存插件中,EHCache 缓存插件是理想的进程范围的缓存插件。本小节将以 EHCache 缓存插件为例,介绍二级缓存的配置和使用。原创 2023-08-11 08:32:59 · 154 阅读 · 0 评论 -
二级缓存的并发访问策略和常用插件
本节主要介绍二级缓存的并发访问策略和常用的四种插件。原创 2023-08-10 09:01:18 · 83 阅读 · 0 评论 -
Hibernate的二级缓存
提供了一级缓存和二级缓存两种缓存。一级缓存是 Session 级别的缓存,它是属于事务范围的缓存,这一级别的缓存由 Hibernate 管理,一般情况下无须进行干预。二级缓存是 SessionFactory 级别的缓存,它是属于进程范围的缓存,这一级别的缓存可以进行配置和更改,以及动态地加载和卸载,它是由 SessionFactory 负责管理的。二级缓存与一级缓存一样,也是根据对象的 ID 加载和缓存数据的。原创 2023-08-10 09:00:47 · 431 阅读 · 0 评论 -
一级缓存常用操作
在中,一级缓存有三个常见的操作,分别为刷出、清除和刷新操作,下面结合本章前面的案例演示这三种常见的操作。原创 2023-08-10 09:00:13 · 64 阅读 · 0 评论 -
Hibernate的快照技术
这是因为在执行 session 的 save() 方法时,Hibernate 一级缓存中保存了 Goods 对象的数据且会复制一份数据放入到 Hibernate 快照中,在执行 commit() 方法时,Hibernate 会检测快照中的数据与一级缓存中的数据是否一致,由于在此之前 Goods 对象的 price 属性值发生了变化,导致快照中的数据与一级缓存中的数据已经不一致,因此发送了 update 语句,更新了 Hibernate 一级缓存中的数据。// 向一级缓存中存入session对象。原创 2023-08-10 08:59:37 · 65 阅读 · 0 评论 -
Hibernate的一级缓存
2)当调用 Session 接口的 load()、get() 方法,以及 Query 接口的 list()、iterator() 方法时,会判断缓存中是否存在该对象,有则返回,不会查询数据库,如果缓存中没有要查询的对象,则再去数据库中查询对应对象,并添加到一级缓存中。1)当应用程序调用 Session 接口的 save()、update()、saveOrUpdate() 时,如果 Session 缓存中没有相应的对象,则 Hibernate 就会自动把从数据库中查询到的相应对象信息加入到一级缓存中。原创 2023-08-09 08:36:50 · 191 阅读 · 0 评论 -
Hibernate乐观锁
相对于悲观锁而言,乐观锁(optimistic lock)通常认为多个事务同时操作同一数据的情况很少发生,因此乐观锁不进行数据库层次上的锁定,而是基于数据版本(Version)标识实现应用程序级别上的锁定机制,这既能保证多个事务的并发操作,又能有效防止第二类丢失更新的发生。数据版本标识是通过为数据表增加一个 version 字段实现的。增加 version 字段后,程序在读取数据时,会将版本号一同读出,之后在更新此数据时,会将此版本号加一。原创 2023-08-09 08:36:23 · 116 阅读 · 0 评论 -
Hibernate悲观锁
悲观锁(pessimistic lock)是指在每次操作数据时,总是悲观地认为会有其他事务操作同一数据,因此,在整个数据处理过程中,会把数据处于锁定状态。悲观锁具有排他性,一般由数据库实现。在锁定时间内,其他事务不能对数据进行存取等操作,这可能导致长时间的等待问题。在中,用户可以显示地设定锁模式,通常在应用中会设定如下两种锁模式。原创 2023-08-09 08:35:10 · 130 阅读 · 0 评论 -
Hibernate事务的配置
在上述配置中,还使用了 hibernate.connection.isolation 参数配置事务的隔离级别,并将事务的隔离级别设置为 2,表示读已提交。除了使用代码对事务的开启、提交和回滚进行操作以外,还可以在 Hibernate 的配置文件中对事务进行配置。在配置文件中,可以选择使用本地事务或者全局事务,还可以设置事务的隔离级别。由于 JTA 的 API 非常笨重,一般只在应用服务器的环境中使用,并且全局事务的使用限制了应用代码的重用性,所以 Hibernate 的事务管理通常会选择使用本地事务。原创 2023-08-09 08:34:24 · 168 阅读 · 0 评论 -
事务的四大特性和隔离级别
是对 JDBC 的轻量级封装,其主要功能是操作数据库。在操作数据库的过程中,经常会遇到事务处理的问题,而对事务的管理,主要是在 Hibernate 的一级缓存中进行的。在学习 Hibernate 的事务处理之前,先来学习一下什么是事务。在数据库操作中,一项事务(Transaction)是由一条或多条操作数据库的 SQL 语句组成的一个不可分割的工作单元,这些操作要么都完成,要么都取消。接下来将围绕事务的特性、并发问题以及隔离级别进行讲解。原创 2023-08-08 08:35:45 · 69 阅读 · 0 评论 -
QBC的2种检索方式
前面我们已经详细介绍过 Criteria 接口的功能及使用步骤,并通过示例演示了条件查询,接下来将对 QBC 中的其他两种常用的检索方式进行讲解。原创 2023-08-08 08:34:31 · 112 阅读 · 0 评论 -
HQL的5种检索方式
在核心 API 中,Query 接口是专门用于 HQL 查询的接口。教程《》已经讲解过该接口,并通过案例演示了该接口中 list() 方法的使用。本节将针对 HQL 中其他几种常见的检索方式进行详细讲解。原创 2023-08-08 08:34:00 · 143 阅读 · 0 评论 -
Hibernate的5种检索方式
的检索方式主要有五种,包括导航对象图检索方式、OID 检索方式、HQL 检索方式、QBC 检索方式和本地 SQL 检索方式,接下来针对 Hibernate 五种检索方式进行详细讲解。原创 2023-08-08 08:33:02 · 99 阅读 · 0 评论 -
Hibernate的级联与反转
在的关联关系中,可以使用单向关联关系,也可以使用双向关联关系,在双向关联关系中,Hibernate 会同时控制双方的关系,这样在程序操作时,很容易出现重复操作的问题。为了解决这一问题,Hibernate 提供了反转操作,同时,为了在操作多表时,主表(主控方)操作后的数据能与关联表的数据保持一致,Hibernate 还提供了级联操作。接下来将对这两种操作进行详细讲解。原创 2023-08-07 08:31:03 · 108 阅读 · 0 评论 -
Hibernate多对多映射关系
多对多的关联关系映射可以使用学生和课程的关联关系为例进行讲解。通常情况下,为了方便数据的维护,多对多的关系都会产生一张中间表。学生表与课程表的关系如图 1 所示。图 1 学生表和课程表关系由于一个学生可以学习多门课程,而一门课程也可以被多个学生学习,由此可知,学生和课程的关系是多对多关系。这种关系需要在学生类和课程类中分别以集合的方式引入对方的对象,并在映射文件中通过 标签进行映射。原创 2023-08-07 08:29:52 · 66 阅读 · 0 评论 -
Hibernate一对多映射关系
由于删除了两行描述班级有多个学生的代码,实现了班级对学生的一对多单向关联,所以程序只执行了一次 SQL 语句,但达到了同样的效果。如果将 OneToManyTest 中的第 23 行和第 24 行代码删除,并将 grade 表和 student 表中的数据从数据库中删除,那么重新运行 test1() 方法后,控制台的输出结果如图 4 所示。从图 2 的显示结果中可以看出,控制台总共输出了三条 insert 语句和两条 update 语句,此时查询两张表中的数据,如图 3 所示。原创 2023-08-07 08:29:04 · 75 阅读 · 0 评论 -
Hibernate映射关系
从图 2 中可以看出,一对一的关系就是在本类中定义对方类型的对象,如 A 类中定义 B 类类型的属性 b,B 类中定义 A 类类型的属性 a;一对多的关系,在一个 A 类类型对应多个 B 类类型的情况下,需要在 A 类以 Set 集合的方式引入 B 类类型的对象,在 B 类中定义 A 类类型的属性 a;多对多的关系,在 A 类中定义 B 类类型的 Set 集合,在 B 类中定义 A 类类型的 Set 集合,这里用 Set 集合的目的是避免数据的重复。实体对象之间的关系描述数据表之间的关系,如图 2 所示。原创 2023-08-07 08:28:31 · 46 阅读 · 0 评论 -
Hibernate持久化对象的状态转换实例
通过《》的学习,读者已经了解了持久化对象的三种状态,以及三种状态之间的转换方式。本节将通过案例演示这三种状态的转换。原创 2023-08-05 09:05:05 · 63 阅读 · 0 评论 -
持久化对象的状态及状态转换
在中,持久化对象是存储在一级缓存当中的,一级缓存指 Session 级别的缓存,它可以根据缓存中的持久化对象的状态改变同步更新数据库。Hibernate 是持久层的 ORM 框架,专注于数据的持久化工作。在进行数据持久化操作时,持久化对象可能处于不同的状态当中。这些状态可分为三种,分别为瞬时态、持久态和脱管态。下面分别针对这三种状态进行简单介绍。原创 2023-08-05 09:04:22 · 113 阅读 · 0 评论 -
hibernate.cfg.xml和C3P0连接池的配置
Hibernate 配置文件的根元素是 ,该元素中包含一个 子元素,在 元素中又包含多个 元素,这些 property 元素用于对 Hibernate 连接数据库的一些信息进行配置。--设定数据库连接的过期时间,以ms为单位,如果连接池中的某个数据库连接空闲状态的时间 超过timeout时间,则会从连接池中清除 -->--在连接池中所有数据库连接的最大数目 -->原创 2023-08-05 09:02:50 · 137 阅读 · 0 评论 -
*.hbm.xml映射文件详解
映射文件用于向提供对象持久化到关系型数据库中的相关信息,每个映射文件的结构基本相同,其示例代码如下所示:--映射文件的dtd约束信息-->-- name代表的是完整类名(包含的类名),table代表的是表名 -->-- name代表的是className类中的唯一标识属性,column代表的是tableName表中的主键id -->-- 主键生成策略 -->-- name表示className的普通属性 column表示tableName表的普通字段 type 表示字段类型-->原创 2023-08-04 08:44:10 · 307 阅读 · 0 评论 -
Hibernate的运行流程
通过《 Hibernate实现增删改查功能》教程的学习,读者对 Hibernate 的使用已经有了一个初步的了解。在教程《 Hibernate实现增删改查功能》的 Hibernate 程序中,主要涉及四个接口的使用,分别为 Configuration 接口、SessionFactory 接口、Session 接口和 Transaction 接口,除了这四个接口以外,其常用接口还有 Query 和 Criteria 等。关于这几个接口的详细内容将在后面教程中进行讲解。本节将讲解 Hibernate 的运行原创 2023-08-04 08:43:30 · 122 阅读 · 0 评论 -
Hibernate实现增删改查
在项目的 src 目录下创建一个名称为 com.mengma.test 的包,在该包下创建一个名称为UserTest的测试类。在 UserTest 类中创建一个名称为 testInsert 的方法,该方法用于向数据库中添加数据,其代码如下所示。上述代码中,首先创建 Configuration 类的实例,并加载解析 hibernate.cfg.xml 核心配置文件。然后获取 SessionFactory 读取解析映射文件信息,并将 Configuration 对象中的所有配置信息加载到 SessionFact原创 2023-08-04 08:42:55 · 195 阅读 · 0 评论 -
第一个Hibernate程序
通过前面的学习,读者对已经有了一个初步的了解。下面通过一个完整的增、删、改、查案例讲解 Hibernate 框架的使用。原创 2023-08-04 08:42:11 · 59 阅读 · 0 评论 -
Hibernate目录结构和基础JAR包介
在实际开发中,需要将 Hibernate 3 的核心 JAR 以及 lib/required 子目录中的 JAR 包添加到项目中,除此之外,通常还需要添加 Hibernate 3 对 JPA 支持的 JAR,以及实现日志功能的 JAR。Hibernate 的环境搭建非常简单,将表 2 中的所有 JAR 包复制到项目的 WEB-INF/lib 目录下即可。下的版本,读者可以根据自己的环境需求下载指定版本的 Hibernate,本教程下载的是 Windows 版本的 ZIP 压缩包。初学者可以从官方网址。原创 2023-08-02 08:37:49 · 179 阅读 · 0 评论 -
Hibernate是什么
ORM 就是利用描述对象和关系型数据库之间的映射信息,自动将 Java 应用程序中的对象持久化到关系型数据库的表中。通过操作 Java 对象,就可以完成对数据库表的操作。例如对几十、几百张包含几十个字段的表进行插入操作时,编写的 SQL 语句不但很长,而且繁琐,容易出错;使用传统的 JDBC 开发小型应用系统,并不会有什么麻烦,但是对于大型应用系统的开发,使用 JDBC 就会显得力不从心。是一款免费开源的持久层框架,它对 JDBC 进行了轻量级的对象封装,将对象与数据库表建立了映射关系,使。原创 2023-08-02 08:37:05 · 5229 阅读 · 0 评论