`
lijingzhi
  • 浏览: 43953 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Hibernate第04课:hibernate数据管理

阅读更多

实际上前面已经实现了怎么insert数据,怎么update数据.现在了解怎么查询数据.在hibernate中叫加载数据.有两个方法,分别是get和load.

package net.knight.hibernate.test;

import net.knight.hibernate.User;
import net.knight.hibernate.utils.HibernateUtils;

import org.hibernate.Session;
import org.hibernate.Transaction;

import junit.framework.TestCase;

public class SessionTest extends TestCase {

	/**
	 * 如果在能查询到数据的情况下正常,如果没有查询到数据的时候
	 * user对象会返回null,所以只需要判断user是否为null就可以了.
	 */
	public void testSelectByGet() {
		Session session = null;
		Transaction ts = null;
		
		User user = null;
		
		try {
			session = HibernateUtils.getSession();
			ts = HibernateUtils.getTransaction(session);
			
			// 使用session的get接口,ID参数是实现了序列化的对象,只有实现序列化的对象才能存在磁盘上.
			// 在这个接口传入需要加载的类,后面则是传入的ID值(只支持主键),get方法就会自动生成SQL语句.
			// 返回的是一个对象,直接强制转换就可以了.
			user = (User)session.get(User.class, "40284b8120516a1b0120516a1dac0001");
			System.out.println("Username= " + user.getName());
			
			ts.commit();
		}catch(Exception e) {
			e.printStackTrace();
			ts.rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
	
	/**
	 * 使用的是一个代理类,使用的第三方的类CGlib
	 * 如果查询没有数据的时候不会有任何反应,
	 * 只有在真正使用的时候会抛出ObjectNotFoundException
	 */
	public void testSelectByLoad() {
		Session session = null;
		Transaction ts = null;
		
		User user = null;
		
		try {
			session = HibernateUtils.getSession();
			ts = HibernateUtils.getTransaction(session);
			
			// load使用了lazy(延迟加载或称懒加载)的方式加载数据.
			user = (User)session.load(User.class, "40284b8120516a1b0120516a1dac0001");
			
			// 也就是只有执行这条语句的时候才会加载(发出SQL语句).
			System.out.println("Username= " + user.getName());
			
			ts.commit();
		}catch(Exception e) {
			e.printStackTrace();
			ts.rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
}

 

update数据还可以手工建立一个对象,再更新数据.但是这个方法会有问题,更新数据的时候把其他没有赋值的内容都清空.

 

	public void testByUpdtae() {
		Session session = null;
		Transaction ts = null;
		
		try {
			session = HibernateUtils.getSession();
			ts = HibernateUtils.getTransaction(session);
			
			// 现在这个对象是手动构造的Detached对象.
			// 在数据库中是有这个ID的,所以这个执行会成功.
			User user = new User();
			user.setId("40284b8120516a1b0120516a1dac0001");
			user.setName("张三");
			
			// 但是其他没有更新的数据会被清空成NULL.
			session.update(user);
			ts.commit();
		}catch(Exception e) {
			e.printStackTrace();
			ts.rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}

其他没有赋值的内容会被清空,所以不要这样更新数据.

最后看删除数据如何操作.

	public void testByDelete() {
		Session session = null;
		Transaction ts = null;
		
		try {
			session = HibernateUtils.getSession();
			ts = HibernateUtils.getTransaction(session);

			// 不要手工构造这个对象去删某条记录,应该先加载,再删除.
			User user = (User)session.load(User.class, "40284b8120516a1b0120516a1dac0001");
			
			session.delete(user);
			ts.commit();
		}catch(Exception e) {
			e.printStackTrace();
			ts.rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}

 CRUD操作,加载Session,再调用Session的方法就可以了.这里只是查询到数据表中的某一条记录,再对这条记录进行操作.如果要处理一批数据应该要用HQL来处理.

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Hibernate4实战 之第五部分:Hibernate的事务和并发

    ### Hibernate4实战之第五部分:Hibernate的事务与并发 #### 一、事务基础概念 **事务(Transaction)** 是一组逻辑上紧密相连的操作集合。在数据库领域,事务具备ACID特性: - **原子性(Atomicity)**:事务内的所有...

    在struts+hibernate中使用tomcat5.5的jndi数据源

    **第四步:创建数据库表** - 在SQL Server中创建一个名为`emp`的表: ```sql CREATE TABLE emp ( eid INT IDENTITY PRIMARY KEY, ename VARCHAR(50), address VARCHAR(100) ); ``` **第五步:配置Hibernate...

    Hibernate part 14:查询及数据库并发事务

    在第14部分,我们将深入探讨如何在Hibernate中执行查询以及如何管理数据库事务,特别是在并发环境中。 **描述:**描述为空,但我们可以推测博客内容可能包含实际示例、最佳实践以及对Hibernate查询API和事务管理...

    Hibernate3.1_学习源码

    04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...

    BONC_Hibernate

    - **第一部分**:介绍了如何创建第一个Hibernate应用程序,包括设置环境、编写实体类、创建映射文件等步骤。 - **设置**:配置Hibernate所需的环境和依赖库。 - **第一个class**:创建一个简单的Java类作为持久化...

    培训机构hibernate资料ppt

    **第四次课:高级特性与最佳实践** 最后,我们会探讨Hibernate的一些高级特性和最佳实践,以便在实际项目中更高效地使用: 1. 缓存机制:了解Hibernate的L1和L2缓存,以及如何配置和使用缓存。 2. Criteria API与...

    夏昕-Hibernate+开发指南.pdf

    - **文档章节**:主要包括Hibernate的基础知识、高级特性、数据访问、事务管理、缓存管理等核心内容。 - **具体章节内容概览**: - **准备工作**:介绍了开发环境的搭建,包括Ant的安装和配置等。 - **构建...

    Hibernate执行持久层访问步骤

    1. 插入数据:调用Session的save()或saveOrUpdate()方法,Hibernate会自动为无ID的对象生成ID,并将其保存到数据库。 2. 更新数据:使用update()或saveOrUpdate()方法更新已存在的实体状态。 3. 删除数据:调用...

    Hibernate开发指南

    - **构建Hibernate基础代码**: 介绍了如何通过Hibernate生成基本的数据访问代码。 - **Hibernate配置**: 涵盖了配置文件的设置和解释。 - **第一段代码**: 展示了简单的Hibernate应用示例。 - **Hibernate基础...

    hibernate学习笔记第四天的源码

    **hibernate学习笔记第四天源码解析** 在hibernate学习的过程中,第四天通常会深入探讨实体类、映射文件、配置文件以及查询语言等方面的内容。这些是hibernate框架的基础,也是开发者掌握持久化操作的关键。让我们...

    hibernate-distribution中文帮助手册

    9. **Caching**:Hibernate支持二级缓存,可以使用第三方缓存如 EhCache 提高性能。 10. **事务处理**:Hibernate支持JTA和JDBC两种事务处理方式,保证数据的一致性和完整性。 11. **关联映射**:包括一对一、一对...

    hibernate-release-5.4.25.Final_Hibernate5.4.25_hibernate所需jar包_源

    4. 第二级缓存:通过配置缓存插件(如Ehcache或Infinispan),提高数据读取效率。 5. 异常处理:Hibernate将SQL异常转换为特定的HibernateException,便于理解和处理。 总之,Hibernate 5.4.25为Java开发者提供了...

    精通Hibernate:Java对象持久化技术详解

    6. **实体生命周期管理**:Hibernate自动管理对象的状态,包括瞬态、持久化、托管和脱管四种状态,以及它们之间的转换。 7. **多对一、一对多、多对多关系映射**:Hibernate支持复杂的关联关系映射,如单向关联、...

    Hibernate之数据加载方式

    1. **单个对象加载(Single Entity Loading)**:通过`Session.get()`或`Session.load()`方法加载单个对象,前者会立即从数据库中取数据,后者创建代理对象,数据在第一次访问时加载。 2. **集合加载(Collection ...

    Hibernate视频教程免费下载

    - **Hibernate定义**:Hibernate是一种开源的对象关系映射(Object Relational Mapping,ORM)框架,它为Java应用程序提供了强大的数据库交互功能,并且简化了数据持久化层的开发工作。 - **Hibernate特点**: - ...

    Hibernate手册中文版

    - Hibernate提供了第一级缓存(Session级别的缓存)和第二级缓存(SessionFactory级别的缓存),提高数据读取效率。 - 可以集成第三方缓存系统,如Ehcache,实现分布式缓存。 8. **关联映射**: - 一对一...

    Hibernate开发指南.pdf

    ### Hibernate开发指南...通过阅读本书,读者不仅可以学习到如何使用Hibernate来解决常见的数据持久化问题,还可以了解到如何利用Hibernate与其他框架(如Spring)进行高效集成,以构建高性能、高可用性的企业级应用。

    Hibernate学习笔记整理

    4. 第四步 Hibernate 中的类型 * Java Type * Hibernate Type Hibernate 类型 * Java Type:Hibernate 内部直接提供了 Java 类型到数据库的对照表 * Hibernate Type:需要查找该 Hibernate 类型对应的 Java 类型...

    hibernate基础教程

    第四步:编写测试类,体验Hibernate的二级缓存. 第五步:二级缓存的数据并发策略. 当我们使用二级缓存的时候,如果并发策略为:read-only,那么只能对持久化对象进行查询,不能对其进行修改.这...

Global site tag (gtag.js) - Google Analytics