`

hibernate三种状态及常用方法

阅读更多
用hibernate做了几个小项目了 不过感觉就用了ormapping 一些save方法 query方法
很多东西也不明白 也没专门去搞清楚,昨天去面试问了挺多东西 我答得都模棱两可的
不过好像也没错 呵呵 不过还是应该搞搞清楚

今天看了尚学堂的视频 做点小结吧

package my.hibernate.util;


import my.hibernate.pojo.Customer;

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

public class Base {

	
	public static void main(String... args)
	{
		/*Customer customer=new Customer();
		customer.setName("YM");
		//上面的对象处于瞬时态 其与数据库和session都没关系
		
		add(customer);
		System.out.println("customerid是"+customer.getCustomerid());*/
		//上面的对象处于脱管态 数据库中有相应的记录 但是因为session已经关闭 故与session无关了
		
		//对脱管状态的对象进行更新的时候需要调用update方法
		Customer customer=getCustomerById(18);
		
		System.out.println("所查询的用户是"+customer.getName());
	}
	
	//添加
	static void add(Object obj)
	{
		Session session=null;
		Transaction tx=null;
		try
		{
			session=HibernateUntil.getSession();
			tx=session.beginTransaction();
			
			//如果没有事务的话 会插入数据库 又被回滚
			session.save(obj);
			//obj此时属于持久状态 在session关闭之前都处于持久状态
			//处于持久态的对象发生变化的时候 数据库中也会发生相应变化
			
			//如果没有事务的话 persist方法则不插入数据库 会报错
			//session.persist(obj);
			
			
			//调用saveOrUpdate()方法的时候对象会变成持久态
			//而调用merge()方法的时候对象写入了数据库但对象依然是脱管的
			tx.commit();
			//如果处于持久态的对象进行了修改 hibernate将在commit的时候写到数据库中
		}
		//catch部分不写也可以!
		catch(HibernateException ex)
		{
			//事物回滚 并且将异常抛出
			if(tx!=null)
				tx.rollback();
			throw ex;
			}
		finally
		{
			if(session!=null)
				session.close();
		}
	}
	
	static Customer getCustomerById(int id)
	{
		Session session=null;
		try
		{
			session=HibernateUntil.getSession();
			//get是从数据库中查询一条记录
//			Customer customer=(Customer)session.get(Customer.class, id);
			
			//load是懒加载 并没有直接访问数据库 等到调用的时候 比如customer1.getName()时候才进行数据库访问,这种方式不推荐多用
			//因为任何时候customer1都不是为空的 load自己new了一个对象!! 如果库表中没有该记录 但customer1也不是空的 明白???!!
			Customer customer1=(Customer)session.load(Customer.class, id);
			
			//这个时候才会访问数据库 没有这句话将会报错
			customer1.getBandid();
			return customer1;
		}
		finally
		{
			if(session!=null)
				session.close();
		}
	}
}

  • 大小: 21.5 KB
分享到:
评论

相关推荐

    Hibernate三种状态和Session常用的方法

    Hibernate三种状态和Session常用的方法 Hibernate 作为一个流行的 Java 持久层框架,提供了对数据库的操作能力,其中Session 是 Hibernate 中最核心的接口,负责管理对象的生命周期。为了更好地理解 Hibernate 的...

    hibernate配置数据库连接池的三种方法

    在Hibernate 3.0之前,DBCP是常用的连接池实现。配置方法与C3P0类似,需要在`hibernate.cfg.xml`中指定数据库驱动、URL、用户名和密码,但DBCP没有C3P0那么多的定制选项。然而,由于Hibernate 3.0之后不再直接支持...

    Hibernate方法总结

    这是最常用的方法,避免了在保存或更新前检查对象是否已存在的步骤。 4. `delete`: 删除指定的对象,对象必须已被持久化。 D. `bulkUpdate`: 批量操作,如批量删除或更新。例如,`bulkUpdate`方法可以直接执行SQL...

    Hibernate连接池的三种配置方式

    标题中的“Hibernate连接池的三种配置方式”指的是Hibernate框架中常用的三种数据库连接池实现,分别是:DBCP (BasicDataSource),C3P0,以及Proxool。这些连接池的目的是管理和优化数据库连接的创建、分配和回收,...

    hibernate的jar包

    描述中提到"用的挺久了,挺全面的",暗示这个jar包可能包含了Hibernate的核心组件以及一些常用的扩展,比如支持DOM4J库,这是一个用于XML处理的Java库,常在Hibernate中用于读写XML配置文件。另外,还提及了"orcle...

    hibernate_reference中文版和Hibernate中文手册

    6. 对象状态:Hibernate区分了瞬时、持久化、托管和脱管四种对象状态,理解这些状态有助于正确管理对象的生命周期。 7. 关联映射:包括一对一(@OneToOne)、一对多(@OneToMany)、多对一(@ManyToOne)、多对多...

    04_传智播客hibernate教程_Session接口及getloadpersist方法

    本教程聚焦于Hibernate中的Session接口以及get、load、persist这三个常用的方法,它们是 Hibernate 实现对象-关系映射(ORM)的核心组件。 首先,我们来理解Session接口。Session在Hibernate中扮演着数据库连接的...

    hibernate权威整理文档!

    Hibernate提供了简单易用的API来实现这些操作,如根据主键查询对象、更新对象状态、删除对象等。同时,可以使用HQL(Hibernate Query Language)或SQL进行更复杂的查询。 四、Hibernate体系及执行过程 Hibernate的...

    Hibernate save persist merge探究

    save()是Hibernate早期版本中最常用的方法,用于将对象持久化到数据库中。当调用Session的save()方法时,Hibernate会为对象生成一个唯一的数据库标识(ID),并将对象的状态设置为“瞬时”到“持久化”。然而,save...

    hibernate完整资料

    ORM是Hibernate的核心特性,它提供了一种将数据库关系数据映射到Java对象的方法,从而消除了对SQL的直接依赖,简化了数据访问。ORM使得开发者可以使用面向对象的方式来操作数据库,提高了开发效率和代码的可读性。 ...

    hibernate_first_new项目源码

    【hibernate_first_new项目源码】是一个关于Hibernate框架学习的项目,主要涵盖了对Hibernate常用接口的详细讲解和实例应用。Hibernate是一个强大的Java持久层框架,它为开发者提供了对象关系映射(ORM)功能,使得...

    Hibernate完全参考手册

    为了提升Hibernate应用的性能,开发者需要关注查询优化、缓存利用、批处理操作、减少对象状态转换等方面。例如,合理使用fetch join避免N+1问题,控制缓存大小防止内存溢出,以及适时关闭Session以释放资源。 通过...

    hibernate-3.2源码包

    15. **实体状态管理**:Hibernate 分为瞬时态、持久态、游离态三种对象状态,理解这些状态有助于优化性能并避免数据一致性问题。 通过深入学习和分析 Hibernate 3.2 的源代码,开发者可以更全面地理解其内部工作...

    最新的hibernate3.6.0jar包

    6. **实体生命周期**:Hibernate定义了实体的四个状态:瞬时态、持久态、托管态和脱管态,并提供了相应的方法来管理这些状态,如save()、update()、merge()、persist()等。 7. **多对一、一对多、多对多关系映射**...

    Hibernate选择题(含答案).doc

    7. Hibernate中,对象的状态包括:暂时态、持久态、游离态和脱管态(会话态是不常用的术语,实际上指的是持久态)。其中,持久态对象与Session有关系,Session会缓存这些对象并负责其变化同步至数据库。 8. 持久态...

    Spring,SpringMvc,Hibernate

    标题中的"Spring,SpringMvc,Hibernate"涉及到的是Java开发中常用的三个开源框架,它们在企业级Web应用开发中起着核心作用。以下是这三个框架的详细解释: **Spring框架**是Java开发中的一个全面的轻量级容器,它...

    OA项目struts2、 spring、 hibernate 三大框架

    Struts2、Spring和Hibernate是Java开发中三大主流的开源框架,它们分别在MVC(模型-视图-控制器)架构的不同层面发挥作用,为开发者提供了高效、便捷的开发工具。 Struts2作为MVC框架的核心部分,负责控制应用程序...

    Hibernate Hibernate Hibernate

    12. **状态转换**:Hibernate对象有瞬时态、持久态、托管态和游离态四种状态,理解这些状态有助于更好地掌握对象在Hibernate中的生命周期。 13. **级联操作**:通过设置 cascade 属性,可以将操作(如保存、删除)...

    hibernate框架实例

    本实例将深入探讨Hibernate的核心概念和常用功能,帮助你更好地理解和应用Hibernate。 一、Hibernate简介 Hibernate 是一个开源的ORM框架,它通过提供对象-关系映射工具,消除了Java应用程序与关系数据库之间的转换...

    Struts Hibernate Spring 三个框架简介

    Struts、Hibernate 和 Spring 是Java开发中常用的三个开源框架,它们各自解决Web应用开发的不同问题。Struts作为MVC框架,主要用于控制应用的流程和视图呈现;Hibernate则是一个对象关系映射(ORM)框架,简化了...

Global site tag (gtag.js) - Google Analytics