Session接口,是Hibernate框架的运行中心,它被用户程序调用,提供与持久化相关的诸多操作,如加载、添加、查询、更新和删除持久化对象,是实现用户程序持久化工作的主要接口,所以Session被称为持久化管理器。
Transaction接口,是用来指定原子操作的单元范围,它通过对底层具体的JDBC、JTA等事务进行封装和抽象,形成一个统一的事务操作界面。
此外,Hibernate还有两个重要的核心接口:Configuration接口和Query和Criteria接口。Configuration接口是用来对Hibernate配置和启动。Query和Criteria接口是用来执行对数据库的查询,且支持HQL、SQL多种查询方式,其中HQL是一种面向对象的查询语言。
hibernate 核心接口:
Session , Transaction , Query , Configuration
1.
Configuration: 配置,根启动Hibernate 创建SessionFactory 对象
例如 SessionFactory sf=new Configuration().configure().buidSessionFactory();
2.
SessionFactory : 初始化Hibernate 创建Session 对象
例如 Session session=sf.openSession();
3.
Session : 负责保存,更新,删除,加载和查询对象
4.
Transaction : 管理事物
5.
Query和Criteria : 执行数据库查询
例如: Query query=session.createQuery("from Customer c where c.name=:name");
query.seParameter("name","tom",Hibernate.String);
Session 接口方法:
1.
Configuration: 配置,根启动Hibernate 创建SessionFactory 对象
例如 SessionFactory sf=new Configuration().configure().buidSessionFactory();
2.
SessionFactory : 初始化Hibernate 创建Session 对象
例如 Session session=sf.openSession();
3.
Session : 负责保存,更新,删除,加载和查询对象
4.
Transaction : 管理事物
5.
Query和Criteria : 执行数据库查询
例如: Query query=session.createQuery("from Customer c where c.name=:name");
query.seParameter("name","tom",Hibernate.String);
Session 接口方法:
save();
updata();
delete();
load();
find();
updata();
delete();
load();
find();
Session 通过SessionFactory.opensession()方法获得;
控制事物一起Transaction
Session session=SessionFactory.openSession();
Transaction tx=null;
try{
tx=session.begionTrasaction();
//逻辑方法
tx.commit();
}catch(Exception e){
e.printStackTace();
if(tx!=null)
tx.rollback();
thows e;
}finlly{
session.close();
}
控制事物一起Transaction
Session session=SessionFactory.openSession();
Transaction tx=null;
try{
tx=session.begionTrasaction();
//逻辑方法
tx.commit();
}catch(Exception e){
e.printStackTace();
if(tx!=null)
tx.rollback();
thows e;
}finlly{
session.close();
}
//session.save(customers);执行下列SQL语句:
insert into CUSTMERS(ID,NAME,EMAIL,PASSWORD,PHONE,ADDRESS,SEX,IS_MARRIED,DESCRIPTION,IMAGE,BIRTHDAY,REGISTERED_TIME) values(1,'TOM','1234',555566666,'SHANGHAI','M',0,'I AM VERY HONEST'#,'1980-05-06',NULL);
//session.find("from customer as c order by c.name asc")执行下列SQL语句:
select * from CUSTOMERS order by name asc;
//(customer)session.load(customer.class,customer_id)执行下列SQL语句:
select * from CUSTOMERS where ID=1;
update CUSTOMERS set NAME='Tom',EMAIL='tom@yahoo.com',ADDRESS='beijing' where ID=1;
//session.delete("from CUSTOMER as c");执行下列SQL语句
select * from CUSTOMERS;
delete from CUSTOMERS where ID=1;
或者是: session.load(customers.class,id);
session.delete(customer);
或者是: session.load(customers.class,new int(1));
/////////////////映射对象标识符
Hib中的标识符来建立内存中的对象和数据库表中记录的对应关系,对象的OID和数据库表的主键对应。为了保证OID的唯一性和不可变性,应该让Hib给OID赋值。
/////////////////映射一对多关联关系
在关系数据库中,只存在外键参照关系,而且总是由many方参照one方。为了消除数据冗余,关系性数据库只能支持多对一或是一对一的单向关联。
/////////////////操作持久化对象
session的实体对象状态分为三种:游离对象,持久化对象,临时对象
临时对象 :不处于session的缓存中,不和任何的session实例关联,数据库中无记录。
例:order o = new order();通过new刚刚创建的java对象处于临时状态
session的delete方法使游离态,持久化的对象转变为临时状态
持久化对象:位于session的缓存中,总是被一个session实例关联,和数据库中记录对应
session的save方法使临时态变为持久化
session的load,get方法返回对象总是处于持久化状态
session的find方法返回list存放的都是持久化对象
session的update,saveOrUpdate,lock方法使游离态转换为持久态对象
一个持久化对象和临时对象有级联保存的时候session在清空缓存的时候会
把临时对象转化为持久对象
游离态对象:不位于session的缓存中,不被session关联,数据库中可能有记录
session的close方法使缓存清空,缓存中的所有持久化对象变为游离态
session的evict方法从缓存中删除一些持久化对象,不推荐使用应该通过
查询语句来控制对象的深度。
////////////////session的保存,更新,删除和查询
保存:session.save();
customer c = new coustomer();
c.setid(new log(9)) ;
c.setname ("tom");
session s = sessionF.opensession();
transaction tx = s.beginTransaction();
s.save(c);
tx.commit();
session.close();
如果想改变OID的值应使用save的重载save(customer,new long(9));不推荐使用
save方法是当session清理缓存时才会执行insert语句,如果在save以后又对对象进行 修改session会再执行一次update操作。
customer c = new coustomer();
c.setid(new log(9)) ;
c.setname ("tom");
session s = sessionF.opensession();
transaction tx = s.beginTransaction();
s.save(c);
tx.commit();
session.close();
如果想改变OID的值应使用save的重载save(customer,new long(9));不推荐使用
save方法是当session清理缓存时才会执行insert语句,如果在save以后又对对象进行 修改session会再执行一次update操作。
如果save方法已执行不能修改其OID属性。
更新:session.update();
customer c = new customer();
c.setname("tom");
session s = sessionF.opensession();
Transaction tx = s.beginTransaction();
s.save(c);
tx.commit();
session.close();//游离态
c.setname("too");
session2.update(c);
session2.close();//使session2和c关联都会执行一次update修改操作。
session的saveOrUpdate方法同时包含了save和update方法,如果传入的是临时对象调 用save方法,如果传入是游离态就调用update方法如果传入是持久化,就直接返回。
customer c = new customer();
c.setname("tom");
session s = sessionF.opensession();
Transaction tx = s.beginTransaction();
s.save(c);
tx.commit();
session.close();//游离态
c.setname("too");
session2.update(c);
session2.close();//使session2和c关联都会执行一次update修改操作。
session的saveOrUpdate方法同时包含了save和update方法,如果传入的是临时对象调 用save方法,如果传入是游离态就调用update方法如果传入是持久化,就直接返回。
查询:session的load,get和find方法
session的load和get方法根据给定的OID从数据库中加载一个对象,load方法在没有找 到对象时抛出notFoundException异常,get方法返回null。
get和load和其他查询方法返回的对象位于session的缓存中,修改了对象的属性后, session清理缓存时,会根据持久化对象的属性来更新数据库。
list CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1")返回关于 customer的一个集合。
删除:session.delete方法,由于从数据库中删除对象对应的记录,如果出入的是持久化对象session就计划执行一个delete语句。如果出入的参数是游离态对象,先使它成为持久化对象,然后计划执行一个delete语句。session只有在清理缓存的时候才会执行delete语句。只有当调用session的close()方法时才会从session的缓存中删除对象。
session.delete("from customer as c where c.id > 8") ;
/////////////session的检索机制 load(),get(),find();
用来对数据库中检索对象,load()和get()方法按照给定的OID加载一个持久化对象,find方法按照参数指定的HQL语句加载一个或多个持久化对象
CUSTOMER C = (CUSTOMER)SESSION.LOAD(CUSTOMER.CLASS,NEW LOAG(1));
CUSTOMER C = (CUSTOMER)SESSION.GET(CUSTOMER.CLASS,NEW LOAG(2));
LIST CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1");
CUSTOMER C = (CUSTOMER)SESSION.GET(CUSTOMER.CLASS,NEW LOAG(2));
LIST CUSTOMER = SESSION.FIND("FROM CUSTOMER AS C WHERE C.ID = 1");
相关推荐
**Hibernate缓存深入详解** ...总结,理解并熟练运用Hibernate的缓存机制,能够有效提升Java应用的性能,同时要时刻关注数据一致性问题,以确保系统的稳定运行。在实践中不断探索和优化,才能更好地发挥缓存的优势。
【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
### Spring + Hibernate 详解与配置 #### Spring框架概述 Spring框架是一个开源的、轻量级的应用框架,旨在简化企业级应用开发。它提供了一个全面的编程模型,支持从Web到数据访问等各种应用需求。Spring的核心...
Hibernate ORM 是一种强大的Java持久层框架,它实现了对象关系映射(ORM)的概念,使得开发者可以使用面向对象的方式来操作数据库...理解Hibernate的持久化机制和ORM原理,对于掌握Java Web开发中的数据管理至关重要。
5.1.2 Eclipse的运行机制 5.2 建立Eclipse的开发环境 5.2.1 下载Eclipse 5.2.2 配置Eclipse 5.3 整合Eclipse和Tomcat 5.3.1 下载Eclipse的Tomcat插件 5.3.2 为Eclipse配置Tomcat插件 5.4 使用Eclipse建立Web开发项目...
《精通Hibernate:Java持久化对象技术详解[第二版]》是一部深入探讨Hibernate框架的专业书籍,旨在帮助Java开发者熟练掌握和运用这一强大的ORM(Object-Relational Mapping)工具。Hibernate是Java开发领域中广泛...
- **缓存机制**:Hibernate提供了二级缓存机制,用于提高性能。一级缓存由Hibernate自动管理,二级缓存需要手动配置。 - **懒加载**:懒加载是一种延迟加载策略,只有当真正需要数据时才加载,有助于提高应用性能。 ...
【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用程序和数据库之间,减少了对数据库的直接访问,从而提高了整体运行效率。缓存主要分为一级缓存...
标题“菜鸟快速运行第一个hibernate”表明了这是一个针对初学者的教程,旨在帮助他们快速上手并成功运行他们的第一个Hibernate项目。Hibernate是一个强大的Java ORM(对象关系映射)框架,它简化了数据库操作,使得...
通过学习和运行这个实例,开发者可以深入理解SSH框架间的协作机制,了解如何使用注解来声明和管理各个组件,同时也可以掌握如何在不依赖XML配置的情况下实现完整的应用程序流程,包括请求处理、业务逻辑执行、数据...
### 详解Hibernate与WebService结合使用的知识点 #### 一、Hibernate简介 Hibernate是一个开源的对象关系映射(ORM)框架,它提供了强大的数据持久化机制。通过使用Hibernate,开发人员可以将面向对象模型映射到...
【Hibernate3及Spring教程和详解】 Hibernate3是Java领域中的一款流行的对象关系映射(ORM)框架,它允许开发者将数据库操作与业务对象进行解耦,使得代码更加面向对象,提高了开发效率。Hibernate3的核心特性包括...
本文将详细解析Hibernate配置中的两个关键文件——`hibernate.cfg.xml`和`*.hbm.xml`,并探讨它们在Hibernate运行机制中的作用。 #### hibernate.cfg.xml:全局配置的核心 `hibernate.cfg.xml`文件作为Hibernate的...
9.3 Hibernate的事件处理机制 9.4 批量处理数据 9.4.1 通过Session来进行批量操作 9.4.2 通过StatelessSession来进行批量操作 9.4.3 通过HQL来进行批量操作 9.4.4 直接通过JDBC API来进行批量操作 9.5...
### Hibernate面试题详解 #### 一、主键生成方式中的`native`与`identity`区别 **1.1 native方式** - **定义**: `native`是一种动态选择标识符生成策略的方式,它根据所使用的底层数据库系统自动选择最适合的生成...