`
- 浏览:
6556 次
- 性别:
- 来自:
北京
-
Hibernate Session 操作数据库的方法详解
在讲Session 方法之前我们必须弄清在Hibernate 中一个实例对象的三种状态。
① 自由状态(transisent)又叫瞬时状态:对象被实例化但没有给对象的OID 属性赋值。
User user = new User(); 这时的user 处于自由状态。
② 游离状态(detached)又叫托管状态:实例化对象的OID 属性也被赋值。
user.setId(1); 这时的user 处于游离状态。
③ 持久化状态(persistent):仅与一个Session 相关联。
session.save(user); 这时user 处于持久化状态。
粗略地可以这样认为:当一个实例对象的OID 被赋值,并且在数据库中叶有这样一条记录存在,那么这个对象就是持久对象;当一个实例对象的OID 也被赋值,但在数据库中没有这样的一条记录时,该对象就处于游离状态。
现在我们来讲当Session 中的方法来操作游离对象和持久对象有什么区别:
㈠ 操作游离对象
User user = new User();
user.setId(1);
user.setName("Joe");
save() 方法:
session.save(user);
这时Hibernate 会执行一条SQLINSERT 语句。当数据库存在这条记录时,会抛出异常。
saveOrUpdate()方法:
session.saveOrUpdate(user);
当数据库中没有这条有记录时,Hibernate 会执行一条SQLINSERT 语句。当数据库中有这条记录时,Hibernate的脏检查机制会自动检查游离对象的属性值与数据库中对应的字段值是否一样。如果一样就什么也不做;如果不一样就执行SQLUPDTE 语句。
比如:这时的user 对象的属性 name = "Joe",数据表 t_user 的字段 name = "Joe",Hibernate 什么也不会做,当数据表 t_user 的字段 name = "JOJ" ,那么Hibernate 就会执行一条SQLUPDATE 语句。
persist() 方法:
这个方法基本和save() 方法的用法一样。
update() 方法:
session.update(user);
当数据库中存在这条记录时,Hibernate 总会执行一条SQLUPDATE 语句;当数据库中不存这条记录时,就会抛出异常。
delete() 方法:
session.delete(user);
当数据库中存在这条记录时,Hibernate 总会执行一条SQLDELETE 语句;当数据库中不存这条记录时,就会抛出异常。
merge() 方法:
这个方法基本和saveOrUpdate() 方法的用法相似。
lock() 方法:
session.lock(user,LockMode.NONE); //必须在后面有一条setter 方法,不然Hibernate 什么也不会做。
user.setAge(29);
当数据库中存在这条记录时,Hibernate 总会执行一条SQLUPDATE 语句;当数据库中不存这条记录时,就会抛出异常。
replicate() 方法:
session.replicate(user,ReplicationMode.EXCEPTION);
这个方法基本和save() 方法和 persist() 方法的用法相似。
㈡ 操作持久状态对象
load() 方法:通过OID 从数据库中抓取数据,并把数据加载到一个新实例对象上。
User user =(User) session.load(User.class, 1); // 此时的 user 处于持久状态
调用这个方法时,当数据库中存在这条记录时,Hibernate 会执行一条 SQLSELECT 语句;当数据库中没有这条记录时,会抛出异常。
get() 方法:通过OID 从数据库中抓取数据,并把数据加载到一个新实例对象上。
User user = (User) session.get(User.class, 1); // 此时的 user 处于持久状态
调用这个方法时,当数据库中存在这条记录时,Hibernate 会执行一条 SQLSELECT 语句;当数据库中没有这条记录时,user = null。
save() 方法:
User user = (User) session.load(User.class, 1);
user.setName("JOE");
session.save(user);
Hibernate的脏检查机制会自动检查对象的属性(name)值与数据库中对应的字段(name)值是否一样。如果一样就什么也不做;如果不一样就执行SQLUPDTE 语句。
saveOrUpdate()方法:这时的saveOrUpdate() 和 save() 方法用法一样。
persist() 方法:与 save() 方法一样。
update() 方法:与 save() 方法一样。
delete() 方法:
session.delete(user);
Hibernate 执行一条 SQLDELETE 语句,这时 user 变为游离状态。
merge() 方法:与 update() 方法一样。
lock() 方法:与 update() 方法一样。
session.lock(user,LockMode.NONE); //此时不必在后面有一条setter 方法。
replicate() 方法:与 update() 方法一样。
session.replicate(user,ReplicationMode.EXCEPTION);
flush() 方法:与 update() 方法一样。
User user = (User) session.load(User.class, 1);
user.setName("JOE");
session.flush();
refresh() 方法:
User user = (User) session.get(User.class, 1);
user.setName("JOE");
session.flush();
session.refresh(user);
########################################################################################################
clear() 方法:清空Session 缓存
session.clear();
evcit() 方法:把持久对象从Session 缓存中移除。
session.evcit(user);
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
- **作用**: `Session` 是 Hibernate 中的核心接口之一,它负责执行所有与数据库交互的操作,如保存、更新、查询和删除等。 - **生命周期**: 每个 `Session` 实例都有自己的生命周期,通常在一个事务或业务逻辑单元...
在事务管理方面,Session提供了`beginTransaction()`方法来开启一个事务,这标志着一个数据库操作单元的开始。在事务中执行的数据库操作,如`save()`, `update()`, `delete()`等,都会被事务隔离,并在事务提交(`...
### Hibernate连接各种数据库的配置详解 #### 一、概述 在软件开发中,数据库操作是一项基本且重要的功能。Hibernate作为一种流行的Java持久层框架,能够帮助开发者简化与数据库交互的过程。本文将详细介绍如何...
【hibernate与Session详解】 Hibernate 是一个强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用程序中操作数据库的强大工具。通过Hibernate,我们可以将数据库中的表与Java类进行映射,从而实现对...
### HIbernate Session 详解 #### 一、Session在Hibernate中的地位及作用 在Hibernate框架中,`Session` 是一个非常核心且重要的组件。作为Hibernate提供的主要操作数据库的接口,`Session` 不仅承担着保存、更新...
### Hibernate数据库事务详解 #### 一、概述 Hibernate 是一款流行的 ORM(对象关系映射)框架,它使得 Java 开发者能够更容易地操作数据库。在使用 Hibernate 进行数据库操作时,事务管理是非常重要的一部分。...
**Hibernate 框架搭建与数据库操作详解** Hibernate 是一个流行的开源对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互。在这个教程中,我们将逐步介绍如何搭建 Hibernate 框架,并进行基本的...
《Hibernate留言本项目详解》 Hibernate留言本项目是一款基于Java技术,深度运用Hibernate框架的简易应用,旨在帮助初学者理解并掌握Hibernate的核心概念与实践技巧。这个项目涉及到数据库连接池的配置与使用,以及...
《Hibernate连接数据库详解》 在IT行业中,数据库管理和数据访问技术是至关重要的组成部分,而Hibernate作为Java领域中的一款优秀对象关系映射(ORM)框架,为开发者提供了方便、高效的数据库操作方式。本篇将深入...
【hibernate 连接数据库基础源码】的解析与详解 Hibernate 是一款强大的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。在本教程中,我们将深入探讨Hibernate如何连接到MySQL、Oracle等...
### Hibernate的核心接口——Session详解 #### 一、Session简述 **1. Session概念** - **定义**: Session 是 Hibernate 框架中最常用的接口之一,它又被称为持久化管理器。Session 负责所有与数据库交互的工作,...
- **基本CRUD操作**:通过Session接口提供的方法,可以轻松地完成创建、读取、更新和删除操作。 - **高级查询**:使用HQL或Criteria API进行复杂查询,支持分页、排序等功能。 - **事务管理**:Hibernate提供了对...
4. **会话(Session)**:会话是Hibernate与数据库交互的接口,用于执行CRUD(创建、读取、更新和删除)操作。它是线程安全的,每次数据库操作应在一个新的会话中进行。 5. **配置文件(Hibernate Configuration ...
### Hibernate 常用方法详解 #### 一、前言 Hibernate 是一款强大的对象关系映射(ORM)框架,它简化了 Java 应用程序与数据库之间的交互过程。本文将详细介绍 Hibernate 中常用的几种方法,包括 `save`, `update`...
**Hibernate详解** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需关注SQL的编写,可以更加专注于业务逻辑。本文将深入探讨Hibernate的核心概念、主要功能以及如何在...
《Java使用Hibernate连接Access数据库详解》 在Java开发中,数据持久化是一个不可或缺的部分,而Hibernate作为一款强大的ORM(对象关系映射)框架,极大地简化了这一过程。本篇文章将详细探讨如何使用Hibernate连接...
在Java世界中,Hibernate是一个非常重要的对象关系映射(ORM)框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是底层的数据访问细节。本文将深入探讨Hibernate配置文件,这是使用Hibernate进行数据库...
例如,要将数据插入到MySQL数据库,我们可以创建一个DAO类,如`Insert`,并利用Hibernate提供的Session接口进行数据操作。在`Insert`类中,我们可以创建一个方法,如`saveStudent(Student student)`,该方法会调用`...
Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库上操作对象数据的方式,简化了数据库操作,提高了开发效率。它允许开发者用面向对象的方式来处理数据库,而无需关注底层的SQL...